解析overload、override、final

来源:互联网 发布:网络管理的基本概念 编辑:程序博客网 时间:2024/06/16 10:23

一、overload 重载

给出函数 void fun();下面给出四个对比:

void fun(int a);  重载
int fun(int a ,double b); 重载
const void fun(); error
const void fun(int a, int b); 重载

编译器在编译时,会将函数名结合参数类型列表以某种形式记录起来,编译器不同,记录方式也不一样。下面给出上面的大致形式:
fun _null 这个是我们给出的,相对应上面的四个:

fun _int
fun _int,_double
fun _null 相同就不是重载,会报错
fun _int,_int

总结:
overload重载和函数名以及参数类型有关

二、override 重写

override是在类继承中,子类重写父类virtual方法的关键字。其实override我觉得写不写都无所谓,只是一个标识而已。
下面给出代码:
#include <iostream>using namespace std;class a{public:virtual void fun();protected:private:};void a::fun(){cout << "a" << endl;}class b : public a{public:virtual void fun() override;protected:private:};void b::fun(){cout << "b" << endl;}int main(){b cb;cb.fun();system("pause");return 0;}

三、final关键字

final关键字是为了避免类被继承,或是基类的函数被改写:
#include <iostream>using namespace std;class a{public:virtual void fun();virtual void funFinal() final;protected:private:};void a::fun(){cout << "a::fun" << endl;}void a::funFinal(){cout << "a::funFinal" << endl;}class b : public a{public:virtual void fun() override; 
        // virtual void funFinal(); // 无法被重写
protected:private:};void b::fun(){cout << "b::fun" << endl;}int main(){b cb;cb.fun();system("pause");return 0;}




0 0