继承不同类型的vector类

时间:2013-05-19 10:22:29

标签: c++ inheritance vector stl

我正在尝试继承STL vector类以自己创建一个新类。它将使用vector的基本属性,但我将添加一些新函数,如sum或divide。这里的问题是我正在尝试为不同类型实现该类。我如何同时使用继承和模板?

以下是我的班级机构,我需要一些帮助。

//template <class T> 
?
class NewVector<T> : public vector<T>{

//some constructors
};

是。继承STL不是一个好主意。我知道了。但是让我说我​​正在使用这种继承。

我面临的问题是构建构造函数。

我在main中调用构造函数,

NewVector<int> v1(3);

但问题是我不能像STL矢量那样创建这个v1矢量。当我尝试调试大小为0时,容量为0。我将如何编辑构造函数中的大小和容量?我试图做那些但无法管理。

template <class T> 
class NewVector : public vector<T>{
public:

NewVector(T n){
const ArithmeticVector<T> &v1(n);
cout<<v1.size()<<endl;

    };
//some constructors
};

我看到v1矢量0的大小,但我希望看到它如我所提到的那样。一点帮助都会很好。

这是主文件。我知道我需要编写一些构造函数,但是他们需要同时使用int和double,我还将如何告诉我的班级呢?

using namespace std;
int main() {

NewVector<int> v1(3); // creating some objects
NewVector<int> v2(3); // vector elements are assigned randomly from 0 to 10
NewVector<double> v3(5);
NewVector<double> v4(5);

.....

2 个答案:

答案 0 :(得分:3)

请不要这样做!我不想拿起你写的代码并维护它。如果我看到一个std :: vector而不是我知道我正在处理什么。在你的课上,我不会。

请注意,std :: vector没有虚拟析构函数,有一天,有人会使用std :: vector指针来引用你的类。

我会考虑按照stl采用的算法方法开发所需的操作。这有额外的好处,你的功能有更广泛的用途;横跨许多stl容器。

如果你不喜欢std :: vector实际存储数据的实际方式,那么从头开始构建你自己的类。

答案 1 :(得分:2)

首先,公开继承std::vector和其他标准库容器is considered a bad idea

记住这一点,从另一个类模板继承的类模板所需的语法是

template <class T> 
class NewVector : public vector<T>
{
// ....
};