覆盖>>派生类的运算符

时间:2011-11-11 03:51:39

标签: c++

我正在制作一个程序,要求我们重载>>对于Employee类,当它被使用时,它会读入正确类型的员工,所以我在我的主程序中有这样的东西:

 Employee *emp;
 empIn >> emp;

我认为基类是我想要的地方,因为它是唯一适用于所有派生类的基类。类型由行开头的整数确定,所以我认为这样的东西可能有效(因为我不知道类型,直到我读它):

istream &operator >> (istream &stream, Employee &emp)
{
   int type;
   stream >> type;
   switch(type){
      case 1:
         *emp = new Hourly;
         break;
           ...
   }
   return stream;
}

但是,它不起作用。我是以正确的方式来做这件事的吗?如果没有,请指出我正确的方向。

2 个答案:

答案 0 :(得分:2)

问题似乎是混合引用和指针。在operator>>函数中,您接收emp作为参考,但将其作为指针访问,这是错误的。

要使整个工作正常,{<1}}对象需要在之前分配,然后尝试输入它。你不能在函数内部分配它。

emp

或者

Employe emp;
empIn >> emp;

当然,不要在函数中使用Employe *emp = new Employe; empIn >> *emp;

编译器应该为此提供了很多错误,你应该先看看他们说的是什么。

答案 1 :(得分:1)

如果您希望能够像示例用法一样分配指针,则istream函数的第二个参数应为Employee* &emp。然后,该类型将是对指针的引用,这使您可以根据需要将其指定为方法。