C ++:在父类中创建子类的问题

时间:2014-11-24 04:32:46

标签: c++ c++11

我正在开发一个涉及A类的项目,该类包含一些子类(childB,childC,childD)。我过于简化的目标是拥有类似的东西

#include <string>

class A{
public:
   childB cb;                       <<Error C4430: missing type specifier - int assumed
   childC cc;                       <<Error C4430:    "                            "
   childD cd;                       <<Error C4430:    "                            "

   A(){
      cc.setString("xyz");          <<Error C2039: 'cc' is not a member of A
   }
};

class childB : public A{
public:
   int value;
};

class childC : public A{
private:
   std::string str;
public:       
   void setString(std::string s){
      str = s;
   }
   std::string getString(std::string s){
      return str;
   }
};

class childD : public childB{
public:
   double value;
};

#include "classA.h"

int main (){
   A a;
   a.cc.getString();               <<Error C2228: left of '.getString()' must have class/struct/union
}

从这一点开始,我会在main中有多个东西来设置不同子类的值,但是在编译时我收到很多错误,告诉我cb,cc,cd不是A的成员。其他错误也是列出。

我有什么理由不能将子类添加到父类中,如图所示?

1 个答案:

答案 0 :(得分:0)

我认为父类不可能拥有子类的实例。您可以使用子类指针而不是子类对象。

在单独的头文件中定义子类。

在父类头文件中添加子类的前向声明。

使用子类指针而不是子类对象。

在父方法(如init())中使用相应的子类对象初始化父类的子类指针成员。不要在父构造函数中初始化它们,因为它将进行无限递归。您必须将init()方法移动到cpp文件并在其中包含子类头文件。