日期: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 分)
查看完整评论