Typeid问题,以确定要处理的数据

Typeid issues to determine what data is processed

本文关键字:处理 数据 问题 Typeid      更新时间:2023-10-16

为什么返回false,如何修复?我正在尝试制作一个程序,将数据写入文件,然后可以读取并显示该文件。此外,还有3个类。一个是父类(未显示MyEmployee),Hourly和Salared类是子类。

  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);
        }

我猜你的类层次结构是:

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);

如果对象不是该类型,则empHempS将为null;以及一个有效的指针(如果它是那种类型的话)。

当然,正如chris所建议的那样,用一个虚拟函数来代替整个功能可能会更好。

如果MyEmployee是多态的,请使用dynamic_cast < type-id > ( expression )此操作将操作数表达式转换为id类型的对象,如果转换失败,将返回0。

MyEmployee* empPtr = payroll[i];
if (dynamic_cast<Hourly*>(empPtr))
{
  ...
}