我有一个基类,C++动态对象施工
class Msg
{
public:
ParseMsg()
{
ParseMsgData();
ParseTrailer();
}
virtual void ParseMsgData() = 0;
ParseTrailer();
};
和派生类,
class InitiateMsg : public Msg
{
public:
void ParseMsgData() { ... }
};
class ReadOperationMsg public Msg
{
public:
void ParseMsgData() { ... }
};
class WriteOperationMsg public Msg
{
public:
void ParseMsgData() { ... }
};
和场景是以下,基于所述数据ParseHeader方法
void UsageFunction(string data)
{
Msg* msg = ParseHeader(data);
ParseMsg
}
Msg* ParseHeader(string data)
{
Msg *msg = NULL;
....
switch()
{
case 1:
msg = new InitiateMsg();
break;
case 2:
msg = new ReadOperationMsg{();
break;
case 3:
msg = new WriteOperationMsg{();
break;
....
}
return msg;
}
将决定创建哪个对象,所以我在我使用的类之外实现了ParseHeader函数。我怎样才能使Msg类中的ParseHeader函数,然后使用它?
在C#中同样是在类中定义的方法ParseHeader静态与和从外部用它来实现,
您正在从基类构造函数中调用虚方法。我*高度*怀疑这将做你想要的。 – 2012-04-10 05:19:00
@AndréCaron:实际上,由于函数是_pure_ virtual,调用将导致_undefined behavior_。 – 2012-04-10 05:34:07
@CharlesBailey:我知道,但即使它只是一个虚拟函数(在这种情况下它不会是未定义的行为),它仍然不会做OP想要的。 – 2012-04-10 05:36:35