【问题标题】:Pass and return I/O stream by reference in overloaded I/O operator [duplicate]在重载的 I/O 运算符中通过引用传递和返回 I/O 流 [重复]
【发布时间】:2020-09-28 17:47:50
【问题描述】:
class Distance {
   private:
      int feet;             
      int inches;          
      
   public:
      // required constructors
      Distance() {
         feet = 0;
         inches = 0;
      }
      Distance(int f, int i) {
         feet = f;
         inches = i;
      }
      friend ostream &operator<<( ostream &output, const Distance &D ) { 
         output << "F : " << D.feet << " I : " << D.inches;
         return output;            
      }

      friend istream &operator>>( istream  &input, Distance &D ) { 
         input >> D.feet >> D.inches;
         return input;            
      }
};

为什么要在>>的重载运算符中输入输入的引用并返回输入的引用? 当我尝试删除输入运算符参数中的&并返回正常输入时,为什么输入D3后istream仍然丢失数据。

friend istream &operator>>( istream  &input, Distance &D ) { 
         input >> D.feet >> D.inches;
         return input;            
      }
...
int main() {
   Distance D3;
   cin >> D3;//Input 4 5, data is not lost because pass by value???;
   cout << "Third Distance :" << D3 << endl;// Output 4 5
   int a=0;
   cin>>a;// Still require input data ????
   cout<<a;

【问题讨论】:

    标签: c++ operator-overloading


    【解决方案1】:

    您会发现这篇文章(由 Onur Uzun 撰写)很有用:https://medium.com/@nonuruzun/overloading-input-output-operators-in-c-a2a74c5dda8a

    正如他所说:

    "cout 是 ostream 类的对象,它是编译器定义的类。 当我们执行 cout

    我希望能回答你的问题。

    【讨论】:

    • 问题是为什么我们必须通过引用传递并返回输入的引用变量???关于朋友功能,我已经了解了。
    • 那只是为了让你在返回 istream 对象后链接另一个>>
    猜你喜欢
    • 1970-01-01
    • 2018-05-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多