是否有可能有一个指针可以指向 A、B 和 C 类型的对象?
我假设您的意思是“可以指向 A 对象或 B 对象或 C 对象”,对吗?
是的,你可以有这样的指针。
我将如何定义该指针?
A*
基类指针可以指向派生类的对象。
其次,如果指针可以指向 A/B/C 类,我将如何调用对象的方法?
您在和中定义一个virtual
函数A
并覆盖它。然后,当您通过 your 调用方法时,语言将执行动态调度,即它会根据您指向 a 、指向 a还是指向 a自动调用正确的方法。B
C
A*
A*
A
B
C
在调用方法之前我需要强制转换它们吗?
不,这几乎会破坏虚函数的目的。
这是一个完整的例子:
#include <iostream>
class A
{
public:
virtual ~A() {} // not really needed in this program,
// but almost always needed in real code
// when a class has a virtual function
virtual void method() { std::cout << "A::method\n"; }
};
class B : public A
{
public:
virtual void method() override { std::cout << "B::method\n"; }
};
class C : public A
{
public:
virtual void method() override { std::cout << "C::method\n"; }
};
int main()
{
A a;
B b;
C c;
A* ptr = &a;
ptr->method();
ptr = &b;
ptr->method();
ptr = &c;
ptr->method();
}
输出:
A::method
B::method
C::method