C++ override / overload / final

Override 重写,基类定义了一个虚函数,派生类定义了一个同名函数,且返回值类型或函数参数个数、参数类型三者必须保证与基类一致,才能实现 多态。
有些时候会在派生类的函数后加override关键字,这是显式表示派生类将重写基类函数,可防止一些低级错误。参考 https://www.cnblogs.com/whlook/p/6501918.html, 同时,这篇博客中也介绍了 final关键字的作用:“当不希望某个类被继承,或不希望某个虚函数被重写,可以在类名和虚函数后添加final关键字,添加final关键字后被继承或重写,编译器会报错。”

Overload 重载,包括函数重载和运算符重载,运算符重载也可认为是一种特殊的函数重载。两个函数的名字相同,返回值类型或函数参数个数(或参数顺序)、参数类型三者至少有一项不同,即为重载。构造函数可以被重载,因为构造函数可以带参数。析构函数不可以被重载,因为析构函数不能带参数。重载 用于 同一个作用域内,大多在同一个类中定义。

参考 https://www.cnblogs.com/luxiaoxun/archive/2012/08/09/2630751.html
令人迷惑的隐藏规则
本来仅仅区别重载与重写并不算困难,但是C++的隐藏规则(遮蔽现象)使问题复杂性陡然增加。这里“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。
这种隐藏规则,不仅仅是表现在对成员函数上,对同名的data member也是如此。

猜你喜欢

转载自blog.csdn.net/zgcjaxj/article/details/113805758