在C 子类中重定义基类数据成员时

2008-02-23 05:28:19来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

今天给新员工培训C OOP时, 讲了很多函数重定义的内容, 突然下面提出一个关于数据成员重定义的问题,虽然不算很难,或说比较基础,但我还真不清楚了。。。

class Base
{
public:
int m_i;
};

class Derived: public Base
{
public:
int m_i;
}

Derived oDerived;
oDerived.m_i = 1;

问题是:上面这种情况,oDerived.m_i = 1被赋值的m_i到底是哪一个,子类还是基类中的, 为什么?

我一看到这个问题,就想, 这题问到”点子“上了, 因为我对这题就有不少疑问:
1) 在子类中重定义数据成员,编译器允许吗?
2) 假如编译器允许,oDerived.m_i指的是哪个呢?
3) 直觉告诉我oDerived.m_i访问的是子类中的m_i,那基类中的怎么访问呢?

于是我说, 我们写代码来验证一下吧 :)

结果,问题的答案如下:
1) 这种语法是允许的
2) oDerived.m_i指的是在子类中定义的那个m_i
3) oDerived.Base::m_i访问的才是基类的m_i

至于为什么oDerived.m_i访问的是子类的m_i,我也不知道答案, 我只是想觉得,假如让您设计C , 为了分别访问子类,基类的m_i, 您能找出比oDerived.m_i, oDerived.Base::m_i更合理的方案吗:)




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 中的类型重定义

下一篇: C 学习要点

热门词条
热门标签