中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用c++模板自定義數組

發布時間:2022-03-21 13:33:16 來源:億速云 閱讀:171 作者:小新 欄目:開發技術

這篇文章主要介紹了如何使用c++模板自定義數組,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。


前言:

制造通用模板,創建自定義的數組,

一個數組,里面有這么幾個屬性,數組容量,數組元素個數,數組本身內存地址,這幾個數據都是定義私有類型,提供有參構造,讓用戶可以構造出這個數組對象。下面是有參構造和拷貝構造和析構函數還有operator=重載的代碼

在前面類模板中成員函數創建有這個主意問題,最好的辦法就是把類模板寫在一個hpp的文件中,不要拆開寫成多個文件

1.自定義數組.hpp--文件

#pragma once
#include<iostream>
using namespace std;
#include<string>
template<class T>
class Myarry
{
public:
  Myarry() {};//自己創建有參構造,編譯器就不提供無參構造,所以必須自己寫一次無參構造,即使是空實現也要寫!
  Myarry(int capacity)//有參構造函數
  {
    this->capacity = capacity;
    this->size = 0;
    this->marry = new T[this->capacity];//把數組創建在堆區
  }
  ~Myarry()//析構函數
  {
    if (this->marry !=NULL)
    {
      delete []this->marry;//析構數組必須加[],否則會引發斷點
      marry = NULL;
      this->capacity = 0;
      this->size = 0;
    }
  }
  Myarry(const Myarry& arr)//拷貝構造
  {
    this->capacity = arr.capacity;
    this->size = arr.size;
    this->marry = new T[arr.capacity];
    for (int i = 0; i < arr.size; i++)//把數據拷貝過來
    {
      this->marry[i] = arr->marry[i];
    }
  }
  //等號賦值
  Myarry& operator=(const Myarry& arr)
  {
    if (this->marry != NULL)//如果有數據先清空,再賦值
    {
      delete[]this->marry;
      this->marry  = NULL;
      this->size = 0;
      this->capacity = 0;
    }
    this->capacity = arr.capacity;
    this->size = arr.size;
    this->marry = new T[this->capacity];
    for (int i = 0; i < this->size; i++)//將數據進行拷貝
    {
      this->marry[i] = arr.marry[i];
    }
    return *this;
  }
  void pushback(const T&ptr)//尾加法
  {
    if (this->capacity == this->size)
    {
      cout << "容量已滿!" << endl;
      return;
    }
    this->marry[this->size] = ptr;
    this->size++;
  }
  void deleteback()//尾刪法
  {
    if (this->size == 0)
    {
      cout << "數據為零,沒有可刪數據!" << endl;
    }
    delete this->marry[this->size - 1];
    this->size--;
  }
  T & operator[](int index)//通過下標訪問數組,并使它作為左值加&
  {
    if (index > this->capacity)
    {
      cout << "訪問越界!" << endl;
      exit(0);
    }
    return this->marry[index];
  }
  int gercapacity()//獲取數組容量
  {
    return this->capacity;
  }
  int getsize()//獲取數組元素個數
  {
    return this->size;
  }
private:
  T * marry;//數組
  int capacity;//數組容量
  int size;//數組元素個數
};

2.測試文件

#include "自定義數組.hpp"
class person
{
public:
  person()
  {
    this->age = 0;
  }
  int age;
  string name;
};
void text01()
{
  person p[4];
  p[0].age = 20;
  p[0].name = "張三";
  p[1].age = 0;
  p[1].name = "李四";
  p[2].age = 40;
  p[2].name = "王五";
  p[3].age = 80;
  p[3].name = "趙六";
  Myarry<person>pp(10);
  for (int i = 0; i < 4; i++)
  {
    pp.pushback(p[i]);
  }
  for (int i = 0; i < pp.getsize(); i++)
  {
    cout << pp[i].name<<pp[i].age<< endl;
  }
}
void text02()
{
  Myarry<int>inta(10);
  for (int i = 0; i < 5; i++)
  {
    inta.pushback(i);
  }
  for (int i = 0; i < inta.getsize(); i++)
  {
    cout << inta[i] << endl;
  }
}
int main()
{
  /*text02();*/
  text01();
  return 0;
}

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何使用c++模板自定義數組”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

达州市| 台前县| 合水县| 阿鲁科尔沁旗| 衡山县| 获嘉县| 探索| 邵阳县| 黎城县| 礼泉县| 五大连池市| 新河县| 彭泽县| 皋兰县| 清丰县| 大方县| 奎屯市| 凤台县| 民权县| 岚皋县| 西盟| 申扎县| 永寿县| 临漳县| 台东市| 馆陶县| 西宁市| 通江县| 张家界市| 宜昌市| 修武县| 明光市| 车致| 平武县| 会东县| 永定县| 洪洞县| 美姑县| 延吉市| 西吉县| 双鸭山市|