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

标签 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];


}

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

但是这段代码似乎总是调用附加到类“base”的方法。 据我了解,A 类定义的“method()”应该覆盖基类中的“method()”。

如何通过“base”类型的指针数组调用“A”中定义的方法?

感谢您的帮助。

最佳答案

您需要将 method() 声明为virtual 才能使其正常工作。

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

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

关于c++ - 从基类类型的指针数组调用派生类的方法。 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442626/

相关文章:

c++ - Boost.Filesystem create_directories 破坏目录名称

c# - 从 C# 调用 C++ dll 时如何获取 std::exception 错误描述

c - 指针算术问题 - 尝试对输入字符串进行标记

c++ - 如何删除冗余输出

c - C 语言中的简单密码提示

c++ - C++中如何判断传入缓冲区是否有效?

c++ - 这些有什么区别?

c - 为什么二维数组可以从 int ** 转换为 int * ,而指针数组却不能

javascript - React.js 通过数组创建循环

java - 如何在JAVA中动态创建数组?