C++的纯虚函数,抽象类讲解

纯虚函数是指不必在基类中定义,但必须在派生类中被覆盖(override)的函数。通过新奇的“=0”语法可将虚函数声明为纯虚函数。例如:

        class Base {
        public:
            void f1();              // 不是虚函数
            virtual void f2();      // 是虚函数,但不是纯虚函数
            virtual void f3() = 0;  // 纯虚函数
        };

        Base b; // error: pure virtual f3 not overridden

    在此,Base 是抽象类(因为它有一个纯虚函数),所以不能直接用它来定义对象:Base(很显然)是用来做基类的。例如:

        class Derived : public Base {
            // 没有定义 f1:没关系
            // 没有定义 f2:没关系,继承了 Base::f2
            void f3();
        };

        Derived d; // ok: Derived::f3 覆盖了 Base::f3

    抽象类是定义接口的非常好的工具。事实上,一个只有纯虚函数的类通常被称为接口。

    当然你也可以定义纯虚函数:

        Base::f3() { }

    这样做往往意义不大(虽然这样做可为派生类提供一些简单的公共代码),而且在派生类中仍然需要覆盖 Base::f3()。

    如果你没有在派生类中覆盖纯虚函数,那该派生类也是抽象类:

        class D2 : public Base {
            // 没有定义 f1:没关系
            // 没有定义 f2:没关系,继承了 Base::f2
            // 没有定义 f3:没关系,但 D2 因此也是抽象类
        };

        D2 d; // 错误:没有覆盖纯虚函数 Base::f3

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值