• Effective C++条款36: 区分接口继承和实现继承


    注:下面所说虚函数指不是纯虚函数的普通虚函数。

    这里所说的接口继承,指的是继承基类的纯虚函数;实现继承指的是继承基类的虚函数或者普通函数。

    本条款实际上讲的是使用纯虚函数还是虚函数的问题。

    这个条款概括起来就是:

    如果基类不需要实现,实现在派生类中,那么基类中定义纯虚函数;

    如果基类有默认实现,某些派生类可能会重新定义实现,那么基类中定义虚函数;

    如果派生类完全继承基类的实现,不需任何改变,那么基类中定义普通函数。

    纯虚函数只是一个接口,一般基类不需实现这个接口,但是不表示基类不能实现这个接口(和java不同),实际上,纯虚函数可以在基类内声明,在基类外实现(当然也可以在派生类实现)。

    如下面是正确的,注意基类外实现不加virtual.

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

    }

     

    我认为,如果纯虚函数在类外实现,那和普通虚函数的使用没有区别了。

  • 相关阅读:
    luogu_1009 阶乘之和
    codevs_3117 高精度练习之乘法(my struct)
    luogu_2142 高精度减法
    luogu_1601 A+B Problem(高精)
    luogu_1007 独木桥
    luogu_1006 传纸条
    luogu_1004 方格取数
    luogu_1003 铺地毯
    luogu_1002 过河卒
    BZOJ 2560: 串珠子 (状压DP+枚举子集补集+容斥)
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3103256.html
Copyright © 2020-2023  润新知