类继承和重新定义成员类型c ++

时间:2013-04-21 01:52:12

标签: c++ inheritance polymorphism

假设我们有一个名为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而不是一个布尔值。

1 个答案:

答案 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>等不同的方式相同。