C++:是“虚拟的”遗传给所有子孙
假设以下简单情况(注意virtual的位置)
class A {
virtual void func();
};
class B : public A {
void func();
};
class C : public B {
void func();
};
以下调用将调用B::func()
或C::func()
?
B* ptr_b = new C();
ptr_b->func();
Assume the following simple case (notice the location of virtual)
class A {
virtual void func();
};
class B : public A {
void func();
};
class C : public B {
void func();
};
Would the following call call B::func()
or C::func()
?
B* ptr_b = new C();
ptr_b->func();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
pointer_to_b_type
指向的对象的动态类型。如果我明白您真正想问什么,那么“是”。这将调用
C::func
:<前><代码>C c;
B* p = &c;
p->func();
pointer_to_b_type
.If I understand what you really want to ask, then 'Yes'. This calls
C::func
:使用指针和引用的示例。
使用指针
使用引用。请注意最后一个调用:最重要的调用。
<前><代码>C c;
住宿加早餐旅馆b = c;
b.func(); //调用C::func()
//重要 - 使用参考!
A& a = b;
a.func(); //调用C::func(),而不是B::func()
在线演示:http://ideone.com/fdpU7
Examples using pointers as well as reference.
Using pointer
Using reference. Note the last call: the most important call.
Online Demo : http://ideone.com/fdpU7
它调用您所引用的类中的函数。然而,如果它不存在,它会一直向上。
尝试以下代码:
希望这有帮助
It calls the function in the class that you're referring to. It works it's way up if it doesn't exist, however.
Try the following code:
Hope this helps