c++的继承关系和函数重载

本文探讨了C++中子类与基类的变量重名问题,以及子类如何重载父类的函数。实验表明,基类指针访问的变量为基类自身的变量。在函数重载时,如果子类没有找到匹配的函数,才会查找基类的函数。使用using关键字可以引入父类的函数到子类中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要关注两个方面:

1、子类和基类之间变量重名

2、函数重名,但是形参列表不同

 

第一个:众所周知,子类继承基类的所有变量,那么如果子类的成员变量和父类的某一变量重名,通过父类的引用或者指针访问的变量是父类的变量还是子类的呢?写个程序测之。

 

 

结果为 4

这说明,在编译期间,基类的指针取变量值为基类自己的变量,并在编译期间确定。如果将A的m_a成员去掉,导致编译不成功。

 

第二个,子类如何重载父类的函数。

先看一个程序:

 

此时,编译错误,提示error C2668: 'B::print' : ambiguous call to overloaded function。

找不到print的重载函数

原因,由于b.print(20.0);函数的参数是double类型,在子类只有int和float的类型,在编译的时候如果找到了函数名,将匹配参数列表,匹配不成功,将不会去基类找。只有在子类的函数列表里找不到print函数名,才会去基类找。因此b.print(20.0)找不到合适的以double为形参的print函数。

一种简单的办法是使用using关键字,将基类的print函数名引进子类函数列表。

因此,将B类得注释去掉。即得到正确输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值