从基类类型的指针数组调用派生类的方法.(c++)

Call a method of a derived class from an array of pointers of type base class. (C++)

本文关键字:方法 派生 c++ 调用 基类 类型 指针 数组      更新时间:2023-10-16

我的代码结构类似于以下内容:

#include <iostream>
class base
{
    public:
        void method();
};
class A:public base
{
public:
    void method();
};
void base::method()
{
    std::cout << "base methodn";
}
void A::method()
{
    std::cout << "A methodn";
}

int main()
{
base* array[1];
array[0] = new A;
array[0]->method(); //should call A::method() but it doesnt.
delete array[0];

}

我想,每当我使用指针数组调用"method()"时,调用属于A类的方法(或任何其他从基派生的类,由数组[]指向)。

然而,这段代码似乎总是调用附加到类"base"的方法。根据我的理解,类A定义的"method()"应该覆盖基类中的"method()"。

如何通过类型为"基"的指针数组调用在"A"中定义的方法?

谢谢你的帮助

您需要将method()声明为虚拟才能使其工作。

如果没有virtual关键字,编译器将在编译时静态地选择调用与指针(或引用)类型相关联的方法,而不是指针所指向的对象类型。

通过将方法声明为virtual,您指示编译器在运行时选择调用哪个函数,并且不是基于指针的类型调用函数,而是基于指针指向的对象的类型。