簡體   English   中英

c ++基類和派生類約束

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM