快速 简单 理解重载、重写、同名隐藏

C++ 快速理解 函数重载、重写、同名隐藏

重载

同一个作用域内,两个函数除了返回值类型不同外,其余都相同的情况下,就构成了函数重载

class A
{
	void fun1()
	{}
	void fun1(int a)//和前面的构成了重载,因为参数类型不同
	{}
	//error
	int fun1(int a)//仅有返回值类型不同,不构成重载,错误
	{}
};

重写

重写需要 完全一致,完全一致,完全一致

重写发生在类继承时,虚函数之间. 父类的虚函数被子类函数重写. 在使用一个指向子类对象的父类指针时, 调用父类中被重写的函数, 会执行子类中重写了父类的函数

class A
{
	virtual void fun(int a)
	{}
};
class B : public A
{
	void fun(int a)//构成了重写, 指向B对象的A类指针,
	               //访问fun函数时,访问的是B类的fun
	{}
	//error
	int fun(int a)//错误,重写需要完全一致
	{}
};

同名隐藏

当有其他作用域的方法被引进到自己的作用域中, 但凡自己的作用域中与该方法有一个同名的方法, 不论参数类型, 不论返回值, 只要有一个, 引进的作用域中该同名方法全部看不到了.

同名隐藏同样发生在继承中, 子类继承了父类, 父类中同一个函数名有很多的重载, 但是子类并没有这些方法, 但却可以正常使用父类的方法. 但如果子类定义了自己的同名函数, 但凡有一个 , 都会出现同名隐藏, 父类中同样名字的全部函数都不能再被子类看到了.

class A
{
public:
	void fun(int a)
	{}
	void fun(double b)
	{}
};
class B : public A
{
public:
	void fun()
	{}
};

int main()
{
	B b;
	b.fun();
	//error
	b.fun(1);//此时看不到类 A 中的重载函数,只能够看到B自己所定义的fun
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值