【问题标题】:Base class with a vector<int> member具有 vector<int> 成员的基类
【发布时间】:2017-06-14 13:29:50
【问题描述】:

我正在尝试创建一个抽象基类,我希望派生类实现vector&lt;int&gt; 成员。我的问题是如果我尝试这样做:

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++ 编码经验。

【问题讨论】:

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

标签: c++ visual-studio-2010 vector


【解决方案1】:

我做对了吗?

没有。

编译器告诉您,您可以拥有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;

}

【讨论】:

  • 为了完整起见,您可以将 ChildData 的私有向量添加为派生类的成员
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 2012-01-05
  • 2012-01-23
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
相关资源
最近更新 更多