重载
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也是可以的