重载、重写、重定义的区别

801 阅读1分钟

重载

overload:是指函数名相同的情况下,函数里面的参数不一样,仅存在于类的内部。

void fun(string a)
void fun(int a)

重写

override: 子类重新定义父类的相同名称和参数的虚函数

class Base{
private:
virtual void fun(int a){cout<<"1"<<endl;}
};

class Deep:public Base{
public:
void fun(int a){cout<<"2"<<endl;}
};

重定义

redefining:子类重新定义父类的相同名称的非虚函数,且参数列表可以不同

class Base{
private:
 void fun(int a){cout<<"1"<<endl;}
};

class Deep:public Base{
public:
void fun(int a,int b){cout<<"2"<<endl;}
};

重写需要注意:

1 被重写的函数不能是static的。必须是virtual的

2 重写函数必须有相同的类型,名称和参数列表

3 重写函数的访问修饰符可以不同。尽管virtual是private的,派生类中重写改写为public,protected也是可以的