我有一個基類,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