C ++:通过调用纯虚函数避免重复

时间:2014-04-25 00:41:27

标签: c++

对于以下代码,

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()的上下文是相同的)或者我们无法避免它只是因为我们不能在构造函数中调用纯虚函数?

2 个答案:

答案 0 :(得分:2)

您可以将您的函数h()实现为A的成员。

如果在h()(或其他A::A()构造函数或A)的主体中执行A::~A(),纯虚函数调用将只会出现问题。在B::B()C::C()的正文中,*this的多态类型分别为BC,因此您在类B中声明的虚拟覆盖}或C会生效。

答案 1 :(得分:0)

当然,添加一个只实现该功能并继承自A的中间类D.然后B和C可以从D继承。