主要关注两个方面:
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类得注释去掉。即得到正确输出。