重载(overload)、覆盖(override) 重写 (overwrite)

一、重载(overload)

(1)相同的范围(在同一个作用域中) ;
(2)函数名字相同;
(3)参数不同;

(4)virtual 关键字可有可无。

(5)返回值可以不同;
 

二、覆盖(override)是指派生类函数覆盖基类函数,特征是:
(1)不在同一个作用域(分别位于派生类与基类) ;
(2)函数名字相同;
(3)参数必须相同,即使参数协变也不行

(4)基类函数必须有 virtual 关键字。

(5)返回值相同(或是协变),否则报错;有关 协变 的概念见 请见本人的另一篇文章http://blog.csdn.net/miyunhong/archive/2009/09/16/4557517.aspx
 

三、重写 (overwrite)

(1)不在同一个作用域(分别位于派生类与基类) ;

(2)函数名字相同;

(3)返回值可以不同;
(4)参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意别与重载混淆) 。
(5)参数相同,但是基类函数没有 virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆) 。

class CA
{
public:
	CA(int a, int b)
	{
		a_ = a;
		b_ = b;
	}
public:
	void fun()
	{

	}
private:
	int a_, b_;
};


class CB : public CA
{
	//using CA::CA; C++11才支持
public:
	CB(int a, int b, int c) :CA(a, b)
	{
		c_ = c;
	}
public:
	void fun(int i)
	{

	}
private:
	int c_;
};

int main()
{
	CB b(2, 5); // 错误 子类的构造函数覆盖了父类的构造函数
	CB b2(1, 2, 3);//OK
	b2.fun();  // 错误 子类的void fun(int i)覆盖了父类的void fun()
	b2.fun(2); //OK
}






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值