我的代码结构类似于以下内容:
#include <iostream>
class base
{
public:
void method();
};
class A:public base
{
public:
void method();
};
void base::method()
{
std::cout << "base method\n";
}
void A::method()
{
std::cout << "A method\n";
}
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()”。
如何通过“base”类型的指针数组调用“A”中定义的方法?
感谢您的帮助。
最佳答案
您需要将 method()
声明为virtual 才能使其正常工作。
如果没有 virtual
关键字,编译器将在编译时静态地选择调用与指针(或引用)类型关联的方法,而不是指针指向的对象类型到。
通过将方法声明为virtual
,您是在指示编译器选择在运行时调用哪个函数,并且调用该函数不是基于指针的类型,而是基于指针指向的对象的类型。
关于c++ - 从基类类型的指针数组调用派生类的方法。 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442626/