0
下一個問題可能看起來像一個重複的,但在現場我無法找到確切的想法在其他地方。C++基類和派生類的限制
簡單介紹:這個問題提出,因爲我試圖瞭解我的課多了幾分複雜的繼承組合。
一個音符之前我提出的問題 - 我不看做一種「解決方案」的,只希望與大家共同探討的話題,並獲得更好的思考。
假設你有下面幾行:
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;
}
此代碼是不完整,這是整個目的 - 假設它確實complie並在此代碼提取的約束。 不過我不會只寫代碼,並請您解釋一下頂掉你頭上的任何約束,而是我會增加我的concreate問題:
什麼約束我們是否有以下行:
C& c = pA -> doIt();
據我所知,上面的代碼有一個凝視的約束,這是這些類的層次結構順序:C是B的衍生物,B是女性的A(糾正我如果我錯了......)
我試圖同時保持我上述的層次結構,以實際定義這些類,我不能有doIt方法()返回一個它的派生類C的類型,我可以使用不完整的C型&在函數的原型,但我卻不能返回類型C的對象
謝謝你在前進, SyndicatorBBB
既然這樣,'A'必須B'的'(可能間接)鹼; 'A'必須定義一個成員函數'C&doIt()','C'必須定義一個賦值操作符來接受'A'。 –
如何實現A的mmember函數C&doIt()?你必須在這個函數的主體中創建一個完整類型的dervied類,這是不可能的。 – SyndicatorBBB
你是指c的成員函數返回類A的對象? – Arpit