Pammer 发表于 2020-4-28 15:30

自己实现的数组,当类没有默认构造函数时怎么用?

本帖最后由 Pammer 于 2020-4-28 15:32 编辑

template<typename T>
class MyArray
{
public:
      MyArray(const size_t& Length)
      {
                this->Value = new T;
                return;
      }
private:
      T* Value;
};

class Test
{
public:
      Test(int Arg)
      {
                this->Value = Arg;
      }
private:
      int Value;
};

int main()
{
      MyArray<Test> a(0);
}
让它不报错且不更改Test类时,该怎样写?
用vector容器倒是不报错
vector<Test> a(0);

AmIzero 发表于 2020-4-28 16:23

template<typename T>
class MyArray
{
public:
    MyArray(const size_t& Length)
    {
      this->Value = new T*;
      return;
    }
    void push(const T& obj) {
      T* pNOBJ = new T(obj);
      Value = pNOBJ;
    }
    void pop() {
      if(s > 0)
            s--;
    }
    T& top() {
      return *Value;
    }
    size_t size() {
      return s;
    }
private:
    T** Value;
    size_t s = 0;
};

class Test
{
public:
    Test(int Arg)
    {
      this->Value = Arg;
    }
    int Value;
};

int main()
{
    MyArray<Test> a(200);
    Test b(1);
    a.push(b);
    for (int i = 0; i < 20; i++) {
      a.push(Test(i));
    }
    for (;a.size();) {
      cout << a.top().Value << " ";
      a.pop();
    }
}
另外vector也不能work gcc 6.3.0

Pammer 发表于 2020-4-28 16:29

AmIzero 发表于 2020-4-28 16:23
template
class MyArray
{


额,好像vector也不能这样写,解决了,谢谢

Pammer 发表于 2020-4-28 16:33

AmIzero 发表于 2020-4-28 16:23
template
class MyArray
{


再问个问题,MyArray<int> a = { 1,2,3,4 };
这样的构造函数该怎样写?

AmIzero 发表于 2020-4-28 16:39

Pammer 发表于 2020-4-28 16:33
再问个问题,MyArray a = { 1,2,3,4 };
这样的构造函数该怎样写?

这个问题有点复杂 需要用到 initializer_list
你可以去看看std的vector是怎么实现的

Pammer 发表于 2020-4-28 17:21

AmIzero 发表于 2020-4-28 16:39
这个问题有点复杂 需要用到 initializer_list
你可以去看看std的vector是怎么实现的

虽然看不懂STL里边的vector(一堆define,还有下划线),但还是谢谢你
页: [1]
查看完整版本: 自己实现的数组,当类没有默认构造函数时怎么用?