2013-05-19 79 views
1

我想继承STL向量类来自己创建一个新类。它将使用矢量的基本属性,但我会添加一些新的功能,如总和或除法。这里的问题是我试图为不同类型实现该类。我怎样才能同时使用继承和模板?继承不同类型的向量类

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

​​

是的。继承STL并不是一个好主意。我意识到这一点。但让我们说我正在使用这种继承。

我在这里面临的问题是建设构造函数。

我打电话主这样的构造,

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的大小,但我想看到它3,因为我提到。一点帮助会很好。

这里是主文件。我知道我需要写一些构造函数,但他们需要兼顾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); 

..... 
+3

标准容器并不意味着从 –

+2

派生如果您想为矢量定义新的函数,则为矢量定义新的函数。这不需要继承。 – Pubby

+0

是否有任何方法可以做到这一点?我需要继承向量类。写我自己的矢量类一定是不可能的。 – erenkabakci

回答

2

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

牢记这一点,你需要从另一个类模板继承的类模板语法

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

谢谢你的帮助。对我来说这是一个好的开始。但我不明白的地方是我将如何定义T类型的构造函数?我能和我一起使用STL类的方法吗?这个构造函数是否适用于'NewVector v1(3);'和'NewVector v4(5);'? – erenkabakci

+0

@ user2374877我不明白你的问题。 'T'是一个模板参数。它要么具有用户定义的构造函数,要么没有。 – juanchopanza

3

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

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

我会考虑根据stl所采用的算法方法开发您需要的操作。这有额外的好处,你的功能有更广泛的用法;跨越很多stl容器。

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