C++中的“三重”

在这里插入图片描述

博文内容:重载、重定义(隐藏),重写(覆盖)



概念

重载

函数名相同,函数的参数列表不同(包括参数个数和参数类型),至于返回类型可同可不同。
首先就是对于重载的解释,函数名相同但是参数不同。

class Base
{
public:
	Base()
	{
		cout << "Base()" << endl;
	}

	void Func()
	{
		cout << "Func()" << endl;
	}
	void Func(int)
	{
		cout << "Func(int)" << endl;

	}
	//err
	//int Func(int)
	//{

	//}
	//~Base()
	//{
	//	cout << "~Base()" << endl;
	//}

private:

};

在这里插入图片描述

重定义

重定义 (redefining)也叫做隐藏: 子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。

一般是出现在继承中,对于派生类中函数名与基类中的函数名相同的成员函数。构成重定义。相较于函数重载来说,需要对于参数之类要求只是需要对于函数名相同即可。

class Base
{
public:
	Base()
	{
		cout << "Base()" << endl;
	}

	virtual void Func()
	{
		cout << "Base::Func()" << endl;
	}
	void Func(int)
	{
		cout << "Func(int)" << endl;

	}
	

private:

};

class child:public Base
{
public:
	virtual void Func()
	{
		cout << "child::Func()" << endl;
	}
private:
	int _c;
};

重写

子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改。

和重定义的区别就是关键字virtual ,基类中存在函数前面使用virtual 就是虚函数。与重定义一样都必须是在基类和子类中才会出现这样的定义。但是与重定义的区别在于函数名,参数,返回值都必须相等。也有特例出现例如:
就是对于析构函数,析构函数在底层被取名为destructor,统一命名就会出现对于虚函数实现。
协变(基类与派生类虚函数返回值类型不同)

派生类重写基类虚函数时,与基类虚函数返回值类型不同。即基类虚函数返回基类对象的指
针或者引用,派生类虚函数返回派生类对象的指针或者引用时,称为协变

联系及区别

1、作用域

1、重载要求在同一个作用域。
2、 重写(覆盖)、重定义(隐藏)在基类和派生类2个作用域。

2、函数要求

1、重载函数的函数数名相同但是参数不同。
2、重写函数函数名、参数、返回值(协变例外),且都需要有关键字virtual。
3、重定义函数在重写函数的规则上,少了关键字virtual。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值