在C 子类中重定义基类数据成员时
2008-02-23 05:28:19来源:互联网 阅读 ()
今天给新员工培训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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash