我在为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”行生效?
提前致谢!
答案 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方法; - )