【发布时间】:2013-08-05 12:10:28
【问题描述】:
我有几个从顶级超类派生的类:
基础:CDeviceClientRequest 子类:CDeviceSetEnabledRequest(基础) inst-class:CDeviceGPSSetEnabledRequest*(子类) inst-class: CDeviceTotalStationSetEnabledRequest*(子类)
只有标有 * 的才是可实例化的,其他的都有受保护的构造函数,即 构造函数调用基类构造函数,设置私有成员变量。
我正在通过一种方法构造它们:
CDeviceClientRequest getRequest(int type)
{
switch (type)
{
GPS_SET_ENABLED: return CDeviceGPSSetEnabledRequest();
TS_SET_ENABLED : return CDeviceTotalStationSetEnabledRequest();
default:
// raise an unknown type exception
}
}
然后我有一些调用请求的代码:
void invoke(CDeviceClientRequest& request)
{
// some code
}
所以我在某处有如下代码:
CDeviceClientRequest request = getRequest(GPS_SET_ENABLED);
invoke(request);
我的问题是,虽然我正在调用 CDeviceGPSSetEnabledRequest() 的构造函数, 从 getRequest() 返回的内容是 CDeviceClientRequest,以及传递给调用的内容 也是一个 CDeviceClientRequest,而不是我预期的 CDeviceGPSSetEnabledRequest。
我通过向 std::cout 的所有超类和基类添加一个简单的 whatAmI() 方法来验证这一点 类的名称,我只得到“我是 CDeviceClientRequest”。某处的事实 它正在处理派生类的信息已丢失。
非常感谢任何帮助。 (注:我已经大大简化了帖子的代码)。
【问题讨论】:
标签: c++