父类方法中的子对象

时间:2014-03-27 01:06:47

标签: c++ polymorphism

在回答this question时,我注意到以下内容:

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

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

void A::foo()
{
  B bar;

  //more code
}

直觉上,我想说这不可能,但我不确定。无论这是否是一个好主意,有没有人知道它是否非法(以及为什么)?

编辑:我抓紧了这个例子,我编辑了代码,因此构造函数是公开的。

2 个答案:

答案 0 :(得分:0)

是什么让你觉得无法做到?您提供的示例无效,因为构造函数是私有的。但在制作AB结构后,它完全正常(例如here)。没有规则说基类函数不能有派生类对象。

答案 1 :(得分:0)

你有一种直观的感觉,为什么它似乎无法完成,我认为这是一个好兆头。当基类使用派生类时,这两个类是相互依赖的。这是一种经常遇到但又值得避免的模式。编译器肯定不会抱怨相互依赖的类。