从基类向下转换时,是否可以调用派生对象的虚拟方法?
|
给定以下类结构:
class Base
{
virtual void outputMessage() { cout << \"Base message!\"; }
};
class Derived : public Base
{
virtual void outputMessage() { cout << \"Derived message!\"; }
}
..和此代码段:
Base baseObj;
Derived* convertedObj = (Derived*) &baseObj;
convertedObj->outputMessage();
..输出将是\“ Base message!”。
是否有任何方法可以强制转换或操纵对象,以使派生版本的outputMessage方法被多态调用?
编辑:我将尝试显示为什么我在此之后的原因:
我正在编写挂接到我们主系统的迁移工具。因此,我需要访问受保护的成员方法或自定义现有的虚拟方法。我可以通过定义一个派生类并向其强制转换对象来静态调用方法来实现。我不能做的是更改我不是静态调用的方法(即在代码库其他地方调用的方法)的行为。
我也尝试过直接创建派生类的对象,但是由于对通过构造函数传递的对象的操作,这会导致系统其他部分出现问题。
没有找到相关结果
已邀请:
5 个回复
浮凰量
),但这也不起作用-它将重新初始化基类成员。 您可能要做的就是创建一个非派生对象,该对象没有数据成员,但具有相同的虚拟调度表条目(即,相同的虚拟功能,相同的可访问性私有/受保护/公共,相同的顺序)。 更多警告和警告 它可能可以工作(就像在我的Linux机器上一样),但使用后果自负(我建议不要在生产系统上使用)。 进一步警告:这只能拦截虚拟调度,并且当编译器在编译时知道类型时,有时可以静态地调度虚拟函数。
痴浪墨
久纳禾澎
爆山
荒劫娇噬