我正在制作一个程序,要求我们重载>>对于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;
}
但是,它不起作用。我是以正确的方式来做这件事的吗?如果没有,请指出我正确的方向。
答案 0 :(得分:2)
问题似乎是混合引用和指针。在operator>>
函数中,您接收emp
作为参考,但将其作为指针访问,这是错误的。
要使整个工作正常,{<1}}对象需要在之前分配,然后尝试输入它。你不能在函数内部分配它。
emp
或者
Employe emp;
empIn >> emp;
当然,不要在函数中使用Employe *emp = new Employe;
empIn >> *emp;
。
编译器应该为此提供了很多错误,你应该先看看他们说的是什么。
答案 1 :(得分:1)
如果您希望能够像示例用法一样分配指针,则istream函数的第二个参数应为Employee* &emp
。然后,该类型将是对指针的引用,这使您可以根据需要将其指定为方法。