我认为这可能是一个重复的问题,但我尝试阅读几乎所有相关的帖子,但没有一个是针对我正在寻找的内容。
好的,所以我知道你不能从基类指针调用派生类中的函数,除非它被标记为虚拟。与参考程序 1 一样,如果未将 WhichClass() 标记为虚拟,则它无法调用 B 类的 WhichClass()。
#include<iostream>
using namespace std;
class A
{
public:
const char* WhichClass(){return "A";}
};
class B:public A
{
public:
const char* WhichClass(){return "B";}
};
int main()
{
B b;
A &a = b;
cout<<"In class "<<a.WhichClass();
return 0;
}
如果我将它标记为虚拟,那么它会从基类调用最派生类的函数。现在假设如果我添加另一个继承自 B 的 C 类(如程序 2 所示),并且如果在 B 类中未将WhichClass() 标记为虚拟,那么基引用(&a)如何调用 C 类中的 WhichClass() 函数? 同样对于 B 类引用 (&b),如果根据我们在程序 1 中观察到的在 B 类中甚至没有将其标记为虚拟,它如何在 C 中调用 WhichClass()?
#include<iostream>
using namespace std;
class A
{
public:
virtual const char* WhichClass(){return "A";}
};
class B:public A
{
public:
const char* WhichClass(){return "B";}
};
class C:public B
{
public:
const char* WhichClass() { return "C";}
};
int main()
{
C c;
A &a = c;
B &b = c;
cout<<"In class " << a.WhichClass() << endl;
cout<<"In class " << b.WhichClass() << endl;
return 0;
}