C++ 在重载I/O运算符中通过引用传递和返回I/O流 类距离{ 私人: 内特英尺; 整数英寸; 公众: //必需的构造函数 距离(){ 英尺=0; 英寸=0; } 距离(整数f,整数i){ 英尺=f; 英寸=i; } friend ostream&运营商D.inches; 返回输入; } };
为什么需要在>>的重载运算符中输入输入的引用并返回输入的引用? 当我试图删除输入运算符参数中的符号并返回正常输入时,为什么输入D3后istream仍然丢失数据C++ 在重载I/O运算符中通过引用传递和返回I/O流 类距离{ 私人: 内特英尺; 整数英寸; 公众: //必需的构造函数 距离(){ 英尺=0; 英寸=0; } 距离(整数f,整数i){ 英尺=f; 英寸=i; } friend ostream&运营商D.inches; 返回输入; } };,c++,operator-overloading,C++,Operator Overloading,为什么需要在>>的重载运算符中输入输入的引用并返回输入的引用? 当我试图删除输入运算符参数中的符号并返回正常输入时,为什么输入D3后istream仍然丢失数据 class Distance { private: int feet; int inches; public: // required constructors Distance() { feet =
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;
}
};
friend istream&operator>>(istream&input,Distance&D){
输入>>直径英尺>>直径英寸;
返回输入;
}
...
int main(){
距离D3;
cin>>D3;//输入4 5,数据不会因为传递值而丢失???;
您可以发现这篇文章(由Onur Uzun撰写)非常有用:
正如他在那里所说:
“cout是ostream类的对象,ostream类是编译器定义的类。
当我们这样做的时候,问题是为什么我们必须通过引用传递并返回输入的引用变量???关于friend函数,我已经理解了。这只是为了允许您在返回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;