为什么这会返回false,我该如何解决?我正在尝试创建一个程序,将数据写入文件,然后可以读回该文件并显示它。此外,还有3个班级。一个是父类(MyEmployee未显示),Hourly和Salaried类是子类。
for (int i = 0; i < ARRAY_SIZE; i++)
{
MyEmployee* empPtr = payroll[i];
if (typeid(*empPtr) == typeid(Hourly))
{
Hourly* empHPtr = static_cast<Hourly*>(empPtr);
}
else if (typeid(*empPtr) == typeid(Salaried))
{
Salaried* empSPtr = static_cast<Salaried*>(empPtr);
}
}
for (int i = 0; i < ARRAY_SIZE; i++)
{
payroll[i]->writeData(myWrittenFile);
}
答案 0 :(得分:0)
如果MyEmployee
是多态的,请使用dynamic_cast < type-id > ( expression )
这将操作数表达式转换为type-id类型的对象,如果转换失败,则返回0。
MyEmployee* empPtr = payroll[i];
if (dynamic_cast<Hourly*>(empPtr))
{
...
}
答案 1 :(得分:0)
我猜你的班级层次结构是:
struct MyEmployee { virtual ~MyEmployee() {}; /* ... */ };
struct Hourly : MyEmployee { /* ... */ };
struct Salaried : MyEmployee { /* ... */ };
如果是这样,那么您可以用以下代码替换您的代码:
MyEmployee *empPtr = payroll[i];
Hourly *empH = dynamic_cast<Hourly *>(empPtr);
Salaried *empS = dynamic_cast<Salaried *>(empPtr);
如果对象不属于该类型,则empH
和empS
将为null;和一个有效的指针,如果它是那种类型。
当然,用克里斯建议用虚拟函数替换整个事物可能更好。