如何在派生类中实现纯虚函数是另一个纯虚函数?

时间:2017-09-23 17:37:19

标签: c++

考虑

class A
{
protected:
 virtual void function() =0;
}

class B: public class A 
{
protected:
 virtual void function() { blah blah blah };
}

我想让B类中的function()也是纯虚函数。也就是说,B的派生类必须进行function()的另一个实现。我该如何执行此任务?

1 个答案:

答案 0 :(得分:-1)

任何未实现所有基类的纯虚方法的派生类都是抽象类,因此您无法实例化它。所以你必须实现后者。

  • 同时在声明继承的类时删除关键字class

    class B: public class A
    

成为:

class B: public A {

};

分号也不是多余的,所以将它添加到类声明的每一端。

    class A{
        public:
            virtual void function() =0;
    };

    class B: public A {
        public:
            virtual void function()= 0; // B is an ADT due to this pure method function.
    };

    void B::function() {
            std::cout << "B::function()" << std::endl;
    };

    class C : public B{
        public:
            void function(){
                    B::function();
                    std::cout << "C::funtion()" << std::endl;
            }
    };

    int main(){

    //  A aObj; // error
    //  B bObj; // error
        C cObj; // correct
        cObj.function();

        return 0;
    }
  • 正如您在B类中看到的那样,我将方法function设为纯,因此无法实例化它。我还为它添加了一个定义,以便派生类的对象可以chain up来实现功能。

你也可以做ADT:

class B : public A{
    // it is sufficient to make it ADT by not implementing the base pure method function.
};