C++ 父类方法中的子对象

C++ 父类方法中的子对象,c++,polymorphism,C++,Polymorphism,在回答时,我注意到如下情况: class A { public: A(); void foo(); }; class B: public A { public: B(); }; void A::foo() { B bar; //more code } 直觉上,我想说这是不可能的,但我不确定。不管这是不是一个好主意,有人知道这是否是非法的(为什么) 编辑:我匆忙完成了示例,我编辑了代码,因此构造函数是公共的。是什么让你认为这是不可能的?您给出的示例无效,因为构造

在回答时,我注意到如下情况:

class A
{
  public:
  A();
  void foo();
};

class B: public A
{
  public:
  B();
};

void A::foo()
{
  B bar;

  //more code
}
直觉上,我想说这是不可能的,但我不确定。不管这是不是一个好主意,有人知道这是否是非法的(为什么)


编辑:我匆忙完成了示例,我编辑了代码,因此构造函数是公共的。

是什么让你认为这是不可能的?您给出的示例无效,因为构造函数是私有的。但是在创建了
A
B
结构之后,它工作得非常好(示例)。没有规则规定基类函数不能有派生类对象。

您可以直观地感觉到为什么它似乎无法实现,我认为这是一个好迹象。当基类使用派生类时,这两个类是相互依赖的。这是一种经常遇到但值得尝试避免的模式。编译器当然不会抱怨相互依赖的类。

我不明白为什么不能这样做,it。对此很抱歉,链接修复你不能说“无所谓”然后假装你是认真的。@Kerrek SB我是认真的,我只是不想让人们写下这个问题说“不要那样做,那是个坏主意”。我不认为编译器会允许它,我也不明白为什么它会允许。