2013-04-21 95 views
0

假设我们有一个名为Base的类。在这个类中,有一个向量和函数在这个向量上运行。我想根据矢量的类型创建不同的派生类(一个继承int类,另一个char ...等)。有些方法对于不同的派生类完全相同(int,char,bool ...),其他方法则完全不同。这些方法需要访问向量元素。类继承和重新定义成员类型C++

考虑下面的代码:

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

派生类不能删除或覆盖的东西,这是已在基类。也许你应该尝试模板而不是继承,或者两者的结合? – Detheroc 2013-04-21 01:54:57

回答

2

只能通过派生它来改变基类中的向量的类型。派生类具有基类的所有成员,AS和它自己的成员。

在您的代码中,派生类为vector<int> AND a 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"); 
} 

在上面的代码,一般是持有的T的矢量类(其中T可能是int,布尔,等等)。您通过指定类型例如实例化特定类型的类。 Generic<bool>Generic<bool>不同于Generic<int>,这是从Generic<double>等不同以相同的方式,vector<int>是从vector<bool>不同等