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

重载overload

1.什么是重载
一个类中,函数名相同,函数的形参的类型或者数目不一样
2.原理
C++,底层函数的命名会将形参类型加上,所以底层不会把仅函数名相同的函数认为是同一个。
所以C语言和C++混编要加“extend”

重写override

重写也叫覆盖
子类重新定义父类中有相同名称和参数的虚函数。
重写需要注意:
1 被重写的函数不能是static的。必须是virtual的
2 重写函数必须有相同的类型,名称和参数列表
3 重写函数的访问修饰符可以不同。尽管virtual是private的,派生类中重写改写为public,protected也是可以的

重定义 (redefining)

也叫做隐藏
子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。
如果一个类,存在和父类相同的函数,那么,这个类将会覆盖其父类的方法,除非你在调用的时候,强制转换为父类类型,否则试图对子类和父类做类似重载的调用是不能成功的。

如下:

class base{
public:
	void foo(int a,int b){
		cout<<"A";
	}
}; 
class son:public base{
public:
	void foo(int a,double b){
		cout<<"B";
	}
}; 
int main(){
	son s;
	s.foo(1,1);				//这是foo是son的foo,输出B,重定义
	s.foo(1,2.2);
	s.base::foo(1,1);		//强制转换
}

你可能感兴趣的:(C/C+)