2013-10-03 178 views
1

我在爲我的C++類實驗室分配時遇到了一些麻煩。運算符超載:Ostream/Istream

基本上,我試圖獲得「cout < < w3 < < endl;」工作,所以當我運行該程序的控制檯說「16」。我發現我需要使用一個ostream重載操作,但我不知道該把它放在哪裏或如何使用它,因爲我的教授從來沒有談過它。

不幸的是,我必須使用格式「cout < < w3」而不是「cout < < w3.num」。我知道後者會更快,更容易,但這不是我的決定,因爲任務必須以前一種方式輸入。

main.cpp中:

#include <iostream> 
#include "weight.h" 

using namespace std; 
int main() { 

    weight w1(6); 
    weight w2(10); 
    weight w3; 

    w3=w1+w2; 
    cout << w3 << endl; 
} 

weight.h:

#ifndef WEIGHT_H 
#define WEIGHT_H 

#include <iostream> 

using namespace std; 

class weight 
{ 
public: 
    int num; 
    weight(); 
    weight(int); 
    weight operator+(weight); 

}; 

#endif WEIGHT_H 

weight.cpp:

#include "weight.h" 
#include <iostream> 

weight::weight() 
{ 

} 

weight::weight(int x) 
{ 
    num = x; 
} 

weight weight::operator+(weight obj) 
{ 
    weight newWeight; 
    newWeight.num = num + obj.num; 
    return(newWeight); 
} 

TL; DR:我怎樣才能使「COUT < < main.cpp中的「w3」行通過重載ostream操作工作?

提前致謝!

回答

2

交朋友的功能在你的類

friend ostream & operator << (ostream& ,const weight&);

把它定義爲:

ostream & operator << (ostream& os,const weight& w) 
{ 
    os<<w.num; 
    return os; 
} 

here

+0

工作就像一個魅力!不能夠感謝你:) – Muddy

0
class weight 
{ 
public: 
    int num; 
    friend std::ostream& operator<< (std::ostream& os, weight const& w) 
    { 
     return os << w.num; 
    } 
    // ... 
}; 
0

或者,使該轉換重量to_string方法。數字字符串;-)