c++ - 为派生类覆盖 >> 运算符

标签 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;
}

但是,它不起作用。我要以正确的方式解决这个问题吗?如果没有,请指出正确的方向。

最佳答案

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

为了使整个工作正常进行,emp 对象需要在您尝试输入之前分配。您不能在函数内部分配它。

Employe emp;
empIn >> emp;

或者

Employe *emp = new Employe;
empIn >> *emp;

当然,不要在函数内部使用 new

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

关于c++ - 为派生类覆盖 >> 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8089459/

相关文章:

c++ - VHD 无法在 hyper V 中启动

c++ - 如何在类具有 `unsigned char &operator[]` 时使用 std::copy

c++ - 如何沿任意轴缩放对象(在 3D 空间中)

c++ - [[noreturn]] 函数如何具有返回类型?

c++ - 使用子字符串 C++ 获取奇怪的输出

c++ - 纯右值的结果

c++ - 在 C++ 中返回一个 wchar_t

c++ - 找不到 libpng14-14.dll

C++ 将新类对象添加到数组中的新位置

c++ - 看不见的 C++ 语法