[英]c++ base class and derived class constraints
以下問題可能看似重復,但我無法在網站的其他任何地方找到確切的想法。
簡要介紹:這個問題提出來,因為我試圖理解我班級中更復雜的繼承組合。
在我提出問題之前的一個注意事項 - 我不會尋找某種“解決方案”,只希望與您討論該主題並獲得更好的思考。
假設您有以下幾行:
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
嘗試這個:
class C;
struct A
{
C & doIt();
};
struct B : A
{
void operator=(A const &) { }
};
class C : public B
{
public :
using B::operator=;
C (const B & b) : B(b) {}
B & operator*() { return *this; }
};
C & A::doIt()
{
static B bimpl;
static C cimpl(bimpl);
return cimpl;
}
請注意,隱式賦值運算符隱藏了基本版本,因此我們需要using
明顯式取消隱藏運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.