从类型为基类的指针数组中调用派生类的方法。 (C ++)

时间:2014-03-16 20:35:38

标签: c++ arrays pointers inheritance

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

#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;?

的指针数组

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

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

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

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