如果'Test'是一个普通的类,那么之间有什么区别:
Test* test = new Test;
Run Code Online (Sandbox Code Playgroud)
和
Test* test = new Test();
Run Code Online (Sandbox Code Playgroud) 给定以下类结构:
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方法版本被多态调用?
编辑:我将尝试说明我之后的原因:
我正在编写与我们的主系统挂钩的迁移工具.出于这个原因,我需要访问受保护的成员方法,或自定义现有的虚拟方法.前者我可以通过定义派生类并将对象强制转换为静态来调用方法.我不能做的是改变我不静态调用的方法的行为(即在代码库中的其他地方调用的方法).
我还尝试直接创建派生类的对象,但由于对通过构造函数传递的对象的操作,这会导致系统其他部分出现问题.