假设我们有一个名为Base的类。在这个类中,有一个向量和函数在这个向量上运行。我想根据向量的类型创建不同的派生类(一个用于int的继承类,另一个用于char ...等)。对于不同的派生类,有些方法完全相同(int,char,bool ......),其他方法完全不同。这些方法需要访问向量元素。
请考虑以下代码:
class Base {
public:
std::vector<int> vec;
virtual void Print() { std::cout << vec[0]; }
};
class Derived : public Base {
public:
std::vector<bool> vec;
};
int main() {
Base * test = new Derived;
test->vec.push_back(5);
test->Print();
system("PAUSE");
}
这会输出一个int而不是一个布尔值。
答案 0 :(得分:2)
您只能通过派生来更改基类中矢量的类型。派生类具有基类的所有成员,AS WELL AS自己的成员。
在您的代码中,派生类为vector<int>
和vector<bool>
。被调用的Print
函数是基类的Print
函数,因为派生类没有实现自己的函数。基类的Print
函数打印vector<int>
。
您需要使用模板而不是继承。你可以这样做:
template <class T>
class Generic {
public:
std::vector<T> vec;
void Print() { std::cout << vec[0]; }
};
int main() {
Generic<bool> * test = new Generic<bool>;
test->vec.push_back(5);
test->Print();
system("PAUSE");
}
在上面的代码中,Generic是一个包含T的向量的类(其中T可以是int,bool,等等)。您通过指定类型实例化特定类型的类,例如Generic<bool>
。 Generic<bool>
与Generic<int>
不同,后者与Generic<double>
不同,与vector<int>
与vector<bool>
等不同的方式相同。