1

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

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

//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 的大小,但我想看到它 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);

.....
4

2 回答 2

3

请不要这样做!我不想拿起您编写的代码并对其进行维护。如果我看到一个 std::vector ,我就会立即知道我在处理什么。你的课我不会。

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

我会考虑按照 stl 采用的算法方法开发您需要的操作。这有一个额外的好处是你的函数有更广泛的用途;跨越许多 stl 容器。

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

于 2013-05-19T10:39:41.770 回答
2

首先,公开继承自std::vector和其他标准库容器被认为是一个坏主意

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

template <class T> 
class NewVector : public vector<T>
{
// ....
};
于 2013-05-19T10:26:09.073 回答