我的代码结构类似于以下内容:
#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];
}
我想,每当我打电话给&#34;方法()&#34;使用指针数组调用属于A类的方法(或从array派生的任何其他类派生,由array []指向)。
但是这段代码似乎总是调用附加到类&#34; base&#34;的方法。 据我所知,&#34;方法()&#34;由A类定义的应该覆盖&#34;方法()&#34;在基类。
如何调用&#34; A&#34;中定义的方法?通过类型&#34; base&#34;?
的指针数组感谢您的帮助。
答案 0 :(得分:4)
您需要将method()
声明为虚拟才能使其生效。
如果没有virtual
关键字,编译器将在编译时静态选择调用与指针(或引用)类型相关联的方法,而不是指针指向的对象类型。 / p>
通过将方法声明为virtual
,您可以指示编译器选择在运行时调用哪个函数,而不是根据指针的类型调用函数,而是调用类型指针所指向的对象。