派生类虚拟函数未执行
Derived class virtual function not executed
我正在开发一个可视化解决方案,其中包括一个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();
类A
的MyMethod
被执行,但我希望类D
的MyMethod
被执行。有人能解释一下为什么吗?
这就是所谓的切片。
您正在从D
构建A
。CCD_ 12可能提供了来自CCD_ 13的复制构造函数,并且不知道CCD_。您将D
传递给复制构造函数(作为const A&
),构造函数很乐意以这种方式从中复制。当你在这里完成所有工作时,你得到的是一个A
。D
在分配后被终止。
这个问题的大多数解决方案都涉及堆上的分配和指针/引用。
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
。
相关文章:
- 执行函数时导致崩溃的变量
- 在多个时间戳处执行函数
- 程序不会执行函数 c++
- 仅在函数模板中为那些定义了函数的类型执行函数
- 如何在 c++ 的类声明中执行函数?
- 从 std::vector 迭代器中执行函数指针
- 异步 60 秒延迟后C++执行函数?
- 如果发生错误,则返回错误值,否则,继续执行函数
- 执行函数两次
- C++11:如何在 n 秒后在主线程中执行函数
- C++执行函数和 lambda 内部
- 从主线程C 11执行函数调用的线程
- 现代C++执行函数返回指针的方法
- 为什么Win API线程执行函数,而标准线程则没有
- varargs宏以执行函数调用或将其转换为字符串
- 单步执行函数,但不进入VS2017的参数评估
- 加载 Lua 文件并使用变量而不执行函数
- 尽可能在编译时执行函数契约
- 在QT应用程序中创建并执行函数
- 如何使用boostsio_service.post()执行函数并使用数组或指针作为参数