【发布时间】:2011-04-14 05:59:56
【问题描述】:
给定以下类结构:
class Base
{
virtual void outputMessage() { cout << "Base message!"; }
};
class Derived : public Base
{
virtual void outputMessage() { cout << "Derived message!"; }
}
.. 这个代码 sn-p:
Base baseObj;
Derived* convertedObj = (Derived*) &baseObj;
convertedObj->outputMessage();
.. 输出将是“基本消息!”。
有没有什么方法可以转换或操作对象以使 Derived 版本的 outputMessage 方法被多态调用?
编辑:我会尝试说明我为什么要这样做:
我正在编写与我们的主系统挂钩的迁移工具。出于这个原因,我需要访问受保护的成员方法,或者自定义现有的虚拟方法。前者我可以通过定义派生类并将对象转换为它来静态调用方法。我不能做的是改变我不静态调用的方法的行为(即在代码库的其他地方调用的方法)。
我也尝试过直接创建派生类的对象,但是由于对通过构造函数传递的对象的操作,这会导致系统的其他部分出现问题。
【问题讨论】:
-
为什么需要这个?实际上,当您必须执行此类任务时,这说明了设计问题。
-
我将尝试在问题中解释为什么会这样。
-
@Bo:我不这么认为 - 链接的问题似乎是在询问是否简单地转换为派生对象是否会为其他成员分配额外的内存,以及为什么使用它们似乎有效(显然回答“运气/未定义的行为”)。这个Q更多的是关于虚函数,其他没有提到。
-
@Tony - 好的,另一个问题使用 Derived 的数据而不是 Derived 的函数,但除此之外代码是相同的(包括类名:-) 问题是一样的 - 你不能这样做!
标签: c++ inheritance polymorphism