我正在尝试编写一个类,使用DOM将注册列表作为XML写入文件。注册列表包含三种类型的注册:基本注册类Registration,派生自Registration的GuestRegistration和StudentRegistration。
GuestRegistration类具有独特成员category,而student registration具有独特成员qualification。
当我遍历注册指针列表时,我只能访问基类Registration的成员函数。是否有办法访问子类的数据成员以使用getter函数getCategory和getQualification?我尝试创建GuestRegistration和StudentRegistration指针,但出现指针转换错误。
GuestRegistration类具有独特成员category,而student registration具有独特成员qualification。
当我遍历注册指针列表时,我只能访问基类Registration的成员函数。是否有办法访问子类的数据成员以使用getter函数getCategory和getQualification?我尝试创建GuestRegistration和StudentRegistration指针,但出现指针转换错误。
void RegistrationListWriter::write(RegistrationList r) {
QList<Registration*> regList = r.getRegistrationList();
for (int i = 0; i < regList.size(); ++i) {
QString cn = regList.at(i)->metaObject()->className();
Person tempPerson = regList.at(i)->getAttendee();
appendRegistrationAndType(cn);
appendAttendee(tempPerson);
//this is where my issue starts
if (cn == "GuestRegistration") {
GuestRegistration guestReg = regList.at(i);
appendAttendeeCatagory(guestReg.getCatagory());
}
if (cn == "StudentRegistration") {
StudentRegistration* stuReg = regList.at(i);
appendAttendeeQualification(stuReg->getQualification());
}
appendBookingDate(regList.at(i)->getBookingDate().toString());
appendRegistrationFee(regList.at(i)->calculateFee());
}
}
dynamic_cast
,如果返回的不是nullptr
,那么你将可以访问子类方法。 - Mark Ransom