疑問点
詳細はソースを見て頂きたいのですが、ざっと説明いたしますと、演算子や++演算子のオーバーロードの際には、戻り値がクラスで問題ないのに、friend関数を用いて<<演算子をオーバーロードする際に、参照の戻り値にする理由がわかりません。
C++
1#include<iostream> 2using namespace std; 3 4class Car 5{ 6 private: 7 int num; 8 double gas; 9 public: 10 Car( int n = 0, double g = 0 ); 11 Car( const Car& c ); 12 void setCar( int n, double g ); 13 void show(); 14 //friend ostream operator<<( ostream& out, Car c ); //エラー 15 friend ostream& operator<<( ostream& out, Car c ); 16}; 17 18Car::Car( int n, double g ) 19{ 20 num = n; 21 gas = g; 22} 23 24Car::Car( const Car& c ) 25{ 26 num = c.num; 27 gas = c.gas; 28} 29 30void Car::setCar( int n, double g ) 31{ 32 num = n; 33 gas = g; 34} 35 36void Car::show() 37{ 38 cout << "Num: " << num << endl; 39 cout << "Gas: " << gas << endl; 40} 41 42//ostream operator<<( ostream& out, Car c ) 43//{ 44// out << "num: " << c.num << " gas: " << c.gas << endl; 45// return out; 46//} 47 48ostream& operator<<( ostream& out, Car c ) 49{ 50 out << "num: " << c.num << " gas: " << c.gas << endl; 51 return out; 52} 53 54int main() 55{ 56 Car mycar( 1234, 25.5 ); 57 58 cout << mycar; 59/* 60この処理で、挿入演算子がどのように処理されるのかが疑問。 61例えば、<<演算子は、operator<<(cout,mycar)という関数を呼び出すことと同じ意味だとするなら 62戻り値がostreamクラスの参照となっているので、どこかにその参照が格納されているのかという疑問 63 64どこにも戻り値が格納されていないのならば、&をつけないことで何故エラーが出てしまうのかという疑問 65*/ 66 67 return 0; 68}
コメントで疑問を書いてしまいましたが、ご教授いただければ幸いです。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/28 18:24