我有一个正在开发的程序,它要求我们为 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;
}
但是,它不起作用。我要以正确的方式解决这个问题吗?如果没有,请指出正确的方向。
最佳答案
问题似乎是您混合了引用和指针。在 operator>>
函数中,您接收 emp
作为引用,但作为指针访问它,这是错误的。
为了使整个工作正常进行,emp
对象需要在您尝试输入之前分配。您不能在函数内部分配它。
Employe emp;
empIn >> emp;
或者
Employe *emp = new Employe;
empIn >> *emp;
当然,不要在函数内部使用 new
。
编译器应该为此给了你很多错误,你应该先看看他们说的是什么。
关于c++ - 为派生类覆盖 >> 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8089459/