C++ 函数遮蔽看这一篇就够了

C++ 函数遮蔽


子类中和父类中有同名函数(与参数无关),父类同名函数无法被访问到。
如果确实需要调用父类的同名函数,有两种办法:

  1. 在子类的成员函数中调用。用父类::函数名,能够强制调用父类同名成员函数。
void Man::sanmenamefunc(int a) {
	Human::sanmenamefunc();//调用父类的
	Human::sanmenamefunc(12);//调用父类的
	cout << "Man::sanmenamefunc(int a)" << endl;
}
  1. 使用using
    c++11中新增加的功能:让父类同名函数在子类可见。可供子类对象调用。
    通过using这个c++11中的关键字,让父类的同名函数在子类中可见。让父类同名函数子类中以重载的形式使用。
    如果子类父类的函数名参数一样,调用子类的。
class Man : public Human //表示Men是Humen的子类
{
public:
	int houjie;
public:
	Man();
public:
	void sanmenamefunc(int);
public:
	using Human::sanmenamefunc;//直接分号
};//类结尾一定要分号

如果想调用父类的同名同参的还等用父类::函数名。
说明:

  1. using Human::sanmenamefunc; 是种声明,只能指定函数名。凡是基类中的public,protected函数都能暴露到子类,子类可见。无法只暴露一部分。
  2. 目的是让子类的实例中,调用父类的重载版本。
	Man m;
	m.sanmenamefunc(10);//先检查子类有没有匹配函数,如果调用子类的。如果没有检查父类。如果子类不加using,不检查父类,子类中没有匹配的函数直接报错。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值