如何创建从模板化类和重载构造函数派生? C ++

时间:2018-04-22 21:20:44

标签: c++

我有模板类vector<typename T,size S>(我必须使用此而不是std::vector)。我想指定一个类型为vector<double,2>的别名,但我还需要计算所有已创建的和所有当前活动对象的数量。这是我的模板类的片段:

template<typename T, size S>
class vector{
  private:
    T *_values;
  public:
    vector():
      _values(new T[S]){
        for(int i =0; i < S; i++)
          _values[i] = T();
    }
    ~vector(){
      delete[] _values;
    }
};

所以我考虑创建名为vector2D的类,它继承vector<double,2>并使用两个额外的静态变量来计算其数量。但是怎么做呢?如何调用超类构造函数和析构函数,使其只包含这两个静态变量的递增/递减? vector2D将在我必须做的项目中经常使用。也许有更好的解决方案?

P.S如何初始化*_values?我试过*_values = { 0 }但它没有用(当然假设这将是一个原始类型的表)。

1 个答案:

答案 0 :(得分:1)

  

我想指定一个类型为vector<double, 2>

的别名

那很简单:

typedef vector<double, 2> vector2D
  

但我还需要计算所有创建的和当前所有活动对象的数量。

这也很简单。这是一个小例子:

#include <iostream>

template <typename T, int S>
class vec {

    public:

    vec() {
        ++obj_counter;
    }

    static int obj_counter;

};

template <typename T, int S>
int vec<T, S>::obj_counter = 0;

typedef vec<double, 2> vec2d;

int main() {

    vec<int, 1> intvec1;
    vec<int, 1> intvec12;
    vec2d doublevec2;

    std::cout << vec2d::obj_counter << std::endl;

    return 0;
}

这样做的好处是obj_counter适用于所有类型。在上面的示例中,如果键入:

std::cout << vec<int, 1>::obj_counter << std::endl;

它会打印2