簡體   English   中英

C++:通過調用純虛函數避免重復

[英]C++: Avoiding repetition by calling pure virtual function

對於以下代碼,

class A
{
    private:
        virtual void f() = 0;
        virtual void g() = 0;
        ...

    public:
        A()
        {
        }

        ...
}

class B : public A
{
    private:
        void f()
        {
            ...
        }
        void g()
        {
            ...
        }
        void h()
        {
            if (...)
            {
                f();
            }
            else
            {
                g();
            }
        }

        ...

    public:
        B()
        {
            h();
        }

        ...

}


class C : public A
{
    private:
        void f()
        {
            ...
        }
        void g()
        {
            f();
        }
        void h()
        {
            if (...)
            {
                f();
            }
            else
            {
                g();
            }
        }

        ...

    public:
        C()
        {
            h();
        }

        ...

}

有沒有辦法避免重復 h()(B 類和 C 類中函數 h() 的上下文是相同的),或者我們不能僅僅因為我們不能在構造函數中調用純虛函數而避免它?

您可以將函數h()A的成員。

只有在A::A() (或其他A構造函數或A::~A() )的主體期間執行h()時,純虛函數調用才會成為問題。 B::B()C::C()的主體內部, *this的多態類型分別是BC ,因此您在類BC聲明的虛擬覆蓋將起作用。

當然,添加一個僅實現該功能並從 A 繼承的中間類 D。然后 B 和 C 可以從 D 繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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