从基类类型的指针数组调用派生类的方法.(c++)
Call a method of a derived class from an array of pointers of type base class. (C++)
我的代码结构类似于以下内容:
#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
,您指示编译器在运行时选择调用哪个函数,并且不是基于指针的类型调用函数,而是基于指针指向的对象的类型。
相关文章:
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 为什么此派生对象无法访问基类的后递减方法?
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 使用基类中的派生方法运行线程,而无需使用模板
- 是否可以使用基类非虚拟方法中的派生类虚拟方法?
- 在派生类中使用基类的私有成员变量的最佳方法
- 如何在从抽象基派生的类中实现相同的方法?
- 调用从模板派生的类的静态方法,而不指定模板
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 从基类实例调用派生类方法而不进行强制转换
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 从纯虚拟类 (A) 派生的指针无法访问来自纯类 (B) 的重载方法
- 通过基类接受方法转发派生 UniquePtr 的右值会移动引用而不是复制
- C ++基础私有方法在将自身转换为派生类后可以访问吗?
- C++ 使用派生类方法更改基类数据成员
- 如何使用派生类特定的方法:派生类中的派生成员
- 使用抽象类的指针访问派生类的方法;派生类似乎也是抽象的