tvS*_*tic 2 c++ polymorphism inheritance
给定以下类结构:
class Base
{
virtual void outputMessage() { cout << "Base message!"; }
};
class Derived : public Base
{
virtual void outputMessage() { cout << "Derived message!"; }
}
Run Code Online (Sandbox Code Playgroud)
..和这段代码:
Base baseObj;
Derived* convertedObj = (Derived*) &baseObj;
convertedObj->outputMessage();
Run Code Online (Sandbox Code Playgroud)
..输出将是"基本消息!".
有没有办法转换或操纵对象,以使Derived的outputMessage方法版本被多态调用?
编辑:我将尝试说明我之后的原因:
我正在编写与我们的主系统挂钩的迁移工具.出于这个原因,我需要访问受保护的成员方法,或自定义现有的虚拟方法.前者我可以通过定义派生类并将对象强制转换为静态来调用方法.我不能做的是改变我不静态调用的方法的行为(即在代码库中的其他地方调用的方法).
我还尝试直接创建派生类的对象,但由于对通过构造函数传递的对象的操作,这会导致系统其他部分出现问题.
不,虚函数对指向的对象的实际类型进行操作,在您的情况下只是一个简单的Base.
实际上,通过降级,你在这里进入未定义行为的土地.这可以像具有多重继承的炸弹一样被吹掉,其中派生类中的vtable与基类中的vtable的偏移量不同.