C++基础 名字遮蔽


问答:

  1. 什么叫名字遮蔽?
    派生类中的成员(包括成员变量和成员函数)和基类中的成员重名,那么就会遮蔽从基类继承过来的成员,这就叫做名字遮蔽。
    有一点要提出,对于继承而言,只要名字一样不管形参个数和类型怎样,都构成名字遮蔽。
  2. 会产生怎样的后果?
    派生类并没有继承到基类的重名的成员函数,它用的是自己的成员函数。换句话说,派生类自己的重名函数把基类的给覆盖了,导致派生类自己使用自己的不能使用基类的。
  3. 派生类非要基类的重名函数怎么办?
    这块常用在:派生类调用基类的构造函数来完成自己的构造函数。
    首先,派生类是不能继承基类的构造函数的,原因:类名都不一样怎么继承???
    所以,想用的话要加上类名和域解析符。
  4. 进一步而言,派生类调用基类的构造函数,那么基类的成员变量会不会因此而改变?
    答案是明确的,不会。原因:基类和派生类是两个不同的作用域,
    派生类仅仅是调用了基类的构造函数,基类的成员变量又不是全局变量,怎么会因为派生类的调用就改变了呢?这里要明确一下基类构造函数的作用:用来初始化基类成员变量的

总结:

在单继承里,名字遮蔽是指派生类的重名成员遮蔽基类的;

只要名字一样不管形参个数和类型怎样,都构成名字遮蔽;

想要在派生类中使用基类的遮蔽成员,加上基类的类名和域解析符。

基类实例化的对象和派生类实例化的对象是两个不同的存储单元,不用担心派生类调用基类的构造函数初始化自己的成员变量时会改变基类的成员变量。


实际上,名字遮蔽很简单。顾名思义,就是用自己的遮蔽别人的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值