C 箴言:避免覆盖通过继承得到的名字
2008-02-23 05:24:06来源:互联网 阅读 ()
事情的实质和继承没什么关系。他和作用域有关。我们都知道他在代码中是这样的,
int x; // global variable void someFunc() { double x; // local variable std::cin >> x; // read a new value for local x } |
读入 x 的语句指涉 local 变量 x,而不是 global 变量 x,因为内层作用域的名字覆盖(“遮蔽”)外层作用域的名字。我们能够像这样形象地表示作用域的状况:
当编译器在 someFunc 的作用域中碰到名字 x 时,他们巡视 local 作用域看看是否有什么东西叫这个名字。因为那里有,他们就不再检查其他作用域。在此例中,someFunc 的 x 类型为 double,而 global x 类型为 int,但这不要紧。C 的 name-hiding 规则仅仅是覆盖那个名字。而相对应的名字的类型是否相同是无关紧要的。在此例中,一个名为 x 的 double 覆盖了一个名为 x 的 int。
加入 inheritance 以后。我们知道当我们在一个 derived class member function 内指涉位于 base class 内的一件东西(例如,一个 member function,一个 typedef,或一个 data member)时,编译器能够找到我们指涉的东西是因为 derived classes 继承到声明于 base classes 中的东西。实际中的运作方法是将 derived class 的作用域嵌套在 base class 作用域之中。例如:
class Base { private: int x; public: virtual void mf1() = 0; virtual void mf2(); void mf3(); ... }; class Derived: public Base { public: virtual void mf1(); void mf4(); ... }; |
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇: C 程式中导出Word文档的简易方法
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