以下のプログラムは、ある参考書に載っているものです。
コード中に示した(あ)(い)の部分に関係演算子(<,==)のオーバーロードがされてあるんですが、
何故これが必要なのか分かりません。
本には、「他の演算子も定義しなければならないことがある。(一部省略)」とだけ書かれてあるのですが、何故必要なのか具体的な説明はないままです。
プログラムを見ても(あ)(い)が(main内で)使われている部分は無いですし、(あ)(い)の部分をコメントアウトして、コンパイルしても普通に実行されます。
この(あ)(い)は何故必要なのでしょうか。
回答の方宜しくお願いします。
###// ベクトルにクラスオブジェクトを保存する
###include <iostream>
###include <vector>
using namespace std;
class Demo {
double d;
public:
Demo() { d = 0.0; }
Demo(double x) { d = x; }
Demo &operator=(double x) {
d = x; return *this;
}
double getd() { return d; }
};
bool operator<(Demo a, Demo b) ・・・・・(あ)
{
return a.getd() < b.getd();
}
bool operator==(Demo a, Demo b) ・・・・・(い)
{
return a.getd() == b.getd();
}
int main()
{
vector<Demo> v;
int i;
for(i=0; i<10; i++)
v.push_back(Demo(i/3.0));
for(i=0; i<v.size(); i++)
cout << v[i].getd() << " ";
cout << endl;
for(i=0; i<v.size(); i++)
v[i] = v[i].getd() * 2.1;
for(i=0; i<v.size(); i++)
cout << v[i].getd() << " ";
cout << endl;
return 0;
}
回答1件
あなたの回答
tips
プレビュー