c++继承、重载、覆盖、隐藏

1. 继承:即父类实现的函数,在子类中即可调用。
2. 重载:相同作用内,如一个类中,函数名相同,但函数形参不同。
3. 覆盖:子类和父类中函数名相同,形参相同,基类中有virtual关键字,平常用的最多virtual实现的功能即是覆盖。
4. 隐藏:子类和父类的函数名相同,形参不同,无论基类中有无virtual关键字,此时父类中的函数被隐藏;
子类和父类的函数名相同,形参相同,父类中无virtual关键字(有关键字即为覆盖,此处可看出覆盖和隐藏的区别)

总述:
继承是基础,有了继承才牵扯出覆盖和隐藏,覆盖和隐藏就是对子类和父类中同名函数的处理;
重载和其他无相关性。

重载

相同作用域中,函数名相同,形参不同
如下代码中两个成员函数test作用域相同,一个形参是int i一个形参是float f,此种情况即为重载

class father
{
public:
	void test(int i){}
	void test(float f)();
}

覆盖

子类和父类中函数名相同,形参也相同,基类中有virtual关键字,平常用的最多virtual实现的功能即是覆盖

class father
	{
	public:
		virtual void test(int i){}
	}
	class child : public father
	{
	public:
		void test(int i){ printf("this is child"); }
	}
	child *c = new father();
	c->test();
	打印的结果为 “this is child”

隐藏

隐藏后,子类看不到父类中的函数
子类和父类的函数名相同,形参不相同,无论父类中有无virtual关键字,此时父类中的函数被隐藏
子类和父类的函数名相同,形参相同,父类中无virtual关键字,此时父类中的函数被隐藏(此处如果父类中有关键字,则即为覆盖)

父类中有函数test(),子类中有函数test(int i),此时实例化子类对象,子类对象是看不到父类中的test函数的;
父类中有函数virtual v_test(),子类中有函数v_test(int i),此时实例化子类对象,子类对象是看不到父类中的v_test函数的;

class father
{
public:
	void test(){}
	virtual  void v_test(){}
}
class child : public father
{
public:
	void test(int i){}
	void v_test(int i){}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值