当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

C++箴言:毫不重定义担当的非虚拟函数[VC/C++编程]

赞助商链接



  本文“C++箴言:毫不重定义担当的非虚拟函数[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

假定我奉告你 class(类)D 从 class(类)B publicly derived(公有担当),并且在 class(类)B 中定义了一个 public member function(公有成员函数)mf.mf 的参数和返回值范例是无关紧急的,所以我们就假定它们都是 void.换句话说,我的意思是:

class B {
 public:
  void mf();
  ...
};
class D: public B { ... };

乃至没必要知道关于 B,D,或 mf 的任何事情,给定一个范例为 D 的 object(对象)x,

D x; // x is an object of type D

对此你大概非常吃惊,

B *pB = &x; // get pointer to x
pB->mf(); // call mf through pointer

的行为差别于以下代码:

D *pD = &x; // get pointer to x
pD->mf(); // call mf through pointer

因为在两种情形中,你都调用了 object(对象)x 中的 member function(成员函数)mf.因为两种情形中都是一样的 function(函数)和一样的 object(对象),它们的行为应当有相同的方法,对吗?

是的,应当.但是也大概不,分外地,假如 mf 是 non-virtual(非虚拟)而 D 定义了它自己的版本的 mf:

class D: public B {
 public:
  void mf(); // hides B::mf; see Item33
  ...
};
pB->mf(); // calls B::mf
pD->mf(); // calls D::mf

这种行为两面性的缘由是像 B::mf 和 D::mf 这样的 non-virtual functions(非虚拟函数)是 statically bound(静态绑定)的(拜见 Item 37).这就意味着因为 pB 被声明为 pointer-to-B 范例,所以,即便就像本例中的做法,让 pB 指向一个从 B 担当的类的对象,通过 pB 调用的 non-virtual functions(非虚拟函数)也老是定义在 class B 中的那一个.


  以上是“C++箴言:毫不重定义担当的非虚拟函数[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: 与您的QQ/BBS好友分享!
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .