假设以下简单情况(注意虚拟的位置)
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();
答案 0 :(得分:7)
pointer_to_b_type
指向的对象的动态类型。如果我理解你想要问的是什么,那么'是'。这会调用C::func
:
C c;
B* p = &c;
p->func();
答案 1 :(得分:6)
使用指针和引用的示例。
使用指针
B *pB = new C();
pB->func(); //calls C::func()
A *pA = new C();
pA->func(); //calls C::func()
使用参考。注意最后一个电话:最重要的电话。
C c;
B & b = c;
b.func(); //calls C::func()
//IMPORTANT - using reference!
A & a = b;
a.func(); //calls C::func(), not B::func()
答案 2 :(得分:3)
它调用你所指的类中的函数。然而,如果它不存在,它就会起作用。
请尝试以下代码:
#include <iostream>
using namespace std;
class A {
public:
virtual void func() { cout << "Hi from A!" << endl; }
};
class B : public A {
public:
void func() { cout << "Hi from B!" << endl; }
};
class C : public B {
public:
void func() { cout << "Hi from C!" << endl; }
};
int main() {
B* b_object = new C;
b_object->func();
return 0;
}
希望这有帮助