以下问题可能看起来像重复,但我在网站的其他任何地方都找不到确切的想法。
简要介绍:当我试图在我的班级中理解更复杂的继承组合时,提出了这个问题。
在我提出问题之前请注意 - 我不寻找一种“解决方案”,只是希望与您讨论该主题并获得更好的思考。
假设您有以下几行:
class C : public B
{
public :
C (const B& b) : B (b) {}
B& operator*() {return *this;}
};
int main() {
A* pA = new B();
C& c = pA -> doIt();
*c = *pA;
c = *pA;
return 1;
}
这段代码并不完整,这就是全部目的——假设它确实符合并提取了这段代码中的约束。我仍然不会只是编写代码并要求您解释头顶的任何约束,而是添加我的 concreate 问题:
我们对以下行有什么限制:
C& c = pA -> doIt();
据我了解,上面的代码有一个凝视约束,即这些类的层次顺序:C 派生于 B,B 派生于 A(如果我错了,请纠正我..)
我试图在保持上面描述的层次结构的同时实际定义这些类,并且我不能让 doIt() 返回其派生类 C 的类型。我可以在 A 函数的原型中使用不完整的类型 C& 但是我无法返回 C 类型的对象。
提前谢谢你,SyndicatorBBB