参考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;
}
};