2017-06-14 49 views
0

我试图创建一个抽象基类,我打算派生类实现vector<int>成员。我的问题是,如果我尝试这样做:带有矢量的基类<int>成员

class BaseClass 
{ 
public: 
    virtual int GetCount() = 0; 
    virtual vector<int> ChildData; 
} 

class CID1 : public BaseClass 
{ 
public: 
    int GetCount() 
    { 
     return 3; 
    } 

    //and so on..... 
} 

我得到

  1. “虚拟”的数据声明不允许
  2. “虚拟”是不允许的。

我试图做的是:

  1. 让我的孩子类覆盖了载体,因为它们将通过数组包含不同数量的矢量元素的
  2. 为了能够循环BaseClass*包含声明的子类的地址,以及矢量数据的第二个循环。

我在做正确的方法吗?提前致谢!

注意:我没有使用C++进行编码的经验。

+2

成员数据不能是虚拟的或被覆盖,因为它们是数据。另外,'vector'已经可以运行时调整大小。 –

回答

3

我正确的做法吗?

当编译器让你知道,你可以有virtual成员函数而不是virtual成员变量。

将成员变量更改为成员函数,并确保在派生类中正确实现它们。

class BaseClass 
{ 
    public: 
     virtual int GetCount() = 0; 
     virtual vector<int>& GetChildData() = 0; 
} 

class CID1 : public BaseClass 
{ 
    public: 

     // virtual keyword is not necessary here 
     // but helps with understanding code. 
     virtual int GetCount() 
     { 
     return 3; 
     } 

     virtual vector<int>& GetChildData() 
     { 
     return data; 
     } 

    private: 
     vector<int> data; 

} 
+1

为了完整性,您可以添加ChildData的私有向量作为派生类的成员 –