运算符重载:Ostream / Istream

时间:2013-10-03 19:15:14

标签: c++ operator-overloading overloading istream ostream

我在为C ++课程分配实验室时遇到了一些麻烦。

基本上,我正试图获得“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:如何通过重载ostream操作使main.cpp中的“cout&lt;&lt; w3”行生效?

提前致谢!

3 个答案:

答案 0 :(得分:2)

在班级中建立朋友功能

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

将其定义为:

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

请参阅here

答案 1 :(得分:0)

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

答案 2 :(得分:0)

或者,创建一个将weight.num转换为字符串的to_string方法; - )