1

C++ クラスの実習課題で少し問題があります。

基本的には、「cout << w3 << endl;」を取得しようとしています。プログラムを実行すると、コンソールに「16」と表示されます。ostream オーバーロード操作を使用する必要があることがわかりましたが、教授がそれについて話したことがないため、どこに配置すればよいか、またはどのように使用するかがわかりません。

残念ながら、「cout << w3.num」ではなく、「cout << w3」という形式を使用する必要があります。後者の方がはるかに迅速かつ簡単であることはわかっていますが、割り当てでは前者の方法で入力する必要があるため、それは私の決定ではありません。

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;
}

重量.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

重量.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 << w3」行を機能させるにはどうすればよいですか?

前もって感謝します!

4

3 に答える 3

2

クラスで友達機能を作る

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

次のように定義します。

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

こちらをご覧ください

于 2013-10-03T19:19:30.170 に答える
0
class weight
{
public:
    int num;
    friend std::ostream& operator<< (std::ostream& os, weight const& w)
    {
        return os << w.num;
    }
    // ...
};
于 2013-10-03T19:18:19.810 に答える
0

あるいは、weight.num を文字列に変換する to_string メソッドを作成します ;-)

于 2013-10-04T04:03:27.593 に答える