虚函数、final和override学习

参考https://www.51cto.com/article/787384.html

https://blog.csdn.net/weixin_45138932/article/deta

1、虚函数

        在实现c++多态时会用到虚函数。虚函数使用的其核心目的是通过基类访问派生类定义的函数。所谓虚函数就是在基类定义一个未实现的函数名,为了提高程序的可读性,建议后代中虚函数都加上virtual关键字。

        通过定义虚函数,可以实现动态联编,在函数运行阶段动态的选择合适的成员函数,可实现在派生类中对虚函数进行重写,从而实现统一的接口和不同的执行过程。
虚函数定义格式如下所示:

class A{
    public:
        A(){};
        ~A(){};
        virtual void show(void){
            cout<<"I am A!"<<endl;
        }
};

class B:public A{
    public:
        B(){};
        ~B(){};
        void show(void){
            cout<<"I am B!"<<endl;    
        }        
};

2、final关键字

        在c++11中添加了final和override来让程序在继承类和覆写虚函数时更为安全。

        final关键字用于标识一个类或成员函数,表示它不能被继承或覆盖。当应用于类时,它指示该类不能被其他类继承。当应用于成员函数时,它指示该函数不能在派生类中被覆盖,其两种使用方式如下所示:

  • final修饰类:该类不能被继承
class Base final {
    // 类Base不能被继承
};
  • final修饰成员函数:该成员函数不能在派生类中被覆盖
class Base {
    public:
        virtual void func() final {
        // func函数不能在派生类中被覆盖
        }
};

3、override关键字

        在C++11中, override(重写)关键字用于明确指出派生类中的成员函数旨在覆盖基类中的同名虚拟函数,如果没有被重写,则编译器会报错。这有助于编译器检查派生类中的函数是否确实覆盖了基类中的函数,从而提高了代码的可靠性和可维护性。
        override关键字只能用于派生类中的成员函数,并且该函数必须覆盖基类中的同名虚拟函数。

class Base {
    public:
      virtual void func() {
        std::cout << "Base::func()" << std::endl;
      }
};

class Derived : public Base {
    public:
      void func() override {
        std::cout << "Derived::func()" << std::endl;
        }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值