在回答this question时,我注意到以下内容:
class A
{
public:
A();
void foo();
};
class B: public A
{
public:
B();
};
void A::foo()
{
B bar;
//more code
}
直觉上,我想说这不可能,但我不确定。无论这是否是一个好主意,有没有人知道它是否非法(以及为什么)?
编辑:我抓紧了这个例子,我编辑了代码,因此构造函数是公开的。
答案 0 :(得分:0)
是什么让你觉得无法做到?您提供的示例无效,因为构造函数是私有的。但在制作A
和B
结构后,它完全正常(例如here)。没有规则说基类函数不能有派生类对象。
答案 1 :(得分:0)
你有一种直观的感觉,为什么它似乎无法完成,我认为这是一个好兆头。当基类使用派生类时,这两个类是相互依赖的。这是一种经常遇到但又值得避免的模式。编译器肯定不会抱怨相互依赖的类。