C++ override和overload的区别

转载自http://www.cnblogs.com/tanky_woo/archive/2012/02/08/2343203.html

//Overload重载:
//功能相近的几个函数用相同的名字表示,但参数不同(包括类型、顺序不同),即函数重载。
//(1)相同范围(在同一个类中)
//(2)函数名字相同
//(3)参数不同
//(4)virtual关键字可有可无。
//注意重载解析不考虑返回类型
//------函数名相同,参数不同且在相同范围--重载

//Override覆盖--重写 :
//是指派生函数覆盖基类函数,是C++多态的表现。
//(1)不同的范围(分别位于派生类与基类)
//(2)函数的名字相同
//(3)参数相同
//(4)返回值相同
//(4)基类函数必须有virtual关键字
//----------派生类函数与基类函数完全相同且基类函数有virtual关键字,允许被派生类覆盖

//Overwite--重定义
//(1)位于不同的范围(分别位于派生类与基类)
//(2)函数名字相同
//(3)返回值可以不同
//(4)参数不同,不论有无virtual关键字,基类的函数被隐藏
//(5)参数相同,但是基函数没有virtual关键字,基类函数被隐藏
//当派生类对基类函数进行了override/overwite  ,则派生类使用自己重新override/overwite的函数,否则它使用基类的函数

#include<iostream>
#include<complex>
using namespace std;

class Base{
public:

	virtual void a(int x){ cout << "Base::a(int)" << endl; }
	virtual void a(double x){ cout << "Base::a(double)" << endl; }  //overload Base ::a(int x)
	virtual void b(int x){ cout << "Base::b(int)" << endl; }
	void c(int x){ cout << "Base::c(int)" << endl; }
	void d(int x){ cout << "Base::d(int)" << endl; }

};

class Derived :public Base{
public:

	void a(complex<double>x){ cout << "Derived::a(complex)" << endl; }  //overwrite Base ::a()
	void b(int x){ cout << "Derived::b(int)" << endl; }  //override Base ::b(int)
	void c(int x){ cout << "Derived::c(int)" << endl; }

};

int main(){

	Base A;
	Derived B;


	A.a(1.0);   //Base::a(double);
	B.a(1.0);   //Derived::a(complex)

	A.b(10);   //Base::b(int)
	B.b(10);   //Derived::b(int)

	A.d(1);  //Base::d(int)
	B.d(1); //Base::d(int)

	system("pause");
	return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值