我有一个关于 c++ cast 运算符的问题。
假设你有一个类Message
和几个子类:Message1
Message 2
等等。
假设你有一个类Event
和不同的 Event 子类:Event 1
Event 2
在这两种情况下,我都可以将子类的类型与ID
(例如字段)区分开来
class Message {
....
int MessageID;
}
class Message1 : public Message {
//other fields;
}
class Message2 : public Message {
//other fields;
}
class Event {
int eventID;
}
class Event1 {
Message theMessage;
Message getMessage();
}
class Event2 {
Message theMessage;
}
在这种情况下,我将实例 Event1 或 Event2 插入到 avector<Event>
中,当我通过运营商提取事件时,虽然我确定您有 Event1 的实例,但使用static_cast
?例如:
Event theEvent = myVector.at(i);
Event1 *e1 = static_cast<Event1*>(&theEvent);
if(e1->getID() == xxx) {
Message2 *m2 = static_cast<Message2*>(&e1->getMessage());
}
我有一个问题:在最后一次cast之后,我看不到Message2的实例信息(总是只有它的父类Message) 这种情况下,有必要使用dynamic_cast吗?