派生类虚拟函数未执行

Derived class virtual function not executed

本文关键字:执行 函数 虚拟 派生      更新时间:2023-10-16

我正在开发一个可视化解决方案,其中包括一个C++项目和一个C++/CLI项目
我在C++/CLI项目中实现了一个类的层次结构:

D类=>C类=>B类=>A类

=>表示:源自

A到类D不是ref类。

A包含以下方法:

virtual int MyMethod() const;

MyMethod也在类D:中声明和实现

int MyMethod() const;

我在C++项目中写了以下代码:

A l_dObject = D();
l_dObject.MyMethod();

AMyMethod被执行,但我希望类DMyMethod被执行。有人能解释一下为什么吗?

这就是所谓的切片。

您正在从D构建A。CCD_ 12可能提供了来自CCD_ 13的复制构造函数,并且不知道CCD_。您将D传递给复制构造函数(作为const A&),构造函数很乐意以这种方式从中复制。当你在这里完成所有工作时,你得到的是一个AD在分配后被终止。

这个问题的大多数解决方案都涉及堆上的分配和指针/引用。

A *l_dObject = new D(); // allocate our D on the heap
...
delete l_dObject; // don't forget to delete afterwards
A l_dObject = D();

您正在对对象进行切片:这意味着您正在复制对象的A部分并丢弃D部分。在处理多态对象时,需要使用指向基类的指针或引用。例如:

A* l_dObject = new D();

别忘了稍后delete