前提
c++の勉強をしている初心者です。以下のソースコードはサンプルコードなのですが、2つ疑問点があります。ご教授お願いしたいです。
問題点
①:IdCounterクラス内でdata変数をData型で定義しているがint型ではダメなのか
②:演算子のオーバーロードでは具体的にどのような定義を行っているのか
該当のソースコード
#include<iostream> using namespace std; class Data{ int num; public: Data() :num(0){} Data(int n) :num(n){} int getNum() const { return num;} }; class IdCounter{ static int nextID; Data data; public: int id; IdCounter() :data(Data(0)), id(++nextID){} IdCounter(Data d) :data(d), id(++nextID){} Data getData() const {return data;} IdCounter(const IdCounter& orig) :data(orig.data), id(++nextID){} IdCounter& operator=(const IdCounter& orig){ id = ++nextID; data = orig.data; return(*this); } }; int IdCounter::nextID = 100; int main(){ IdCounter a(Data(123)); cout << '[' << a.id << ']' << a.getData().getNum() << endl; IdCounter b(Data(456)); cout << '[' << b.id << ']' << b.getData().getNum() << endl; IdCounter c(Data(789)); cout << '[' << c.id << ']' << c.getData().getNum() << endl; IdCounter x1 = a, x2; x2 = a; cout << '[' << x1.id << ']' << x1.getData().getNum() << endl; cout << '[' << x2.id << ']' << x2.getData().getNum() << endl; return 0;
出力
[101]123
[102]456
[103]789
[104]123
[106]123
補足情報(FW/ツールのバージョンなど)
c++version : c++98
> ②:演算子のオーバーロードでは具体的にどのような定義を行っているのか
どの部分が演算子オーバーロードなのかは把握していますか?
IdCounter(const IdCounter& orig) :data(orig.data), id(++nextID){}
IdCounter& operator=(const IdCounter& orig){
id = ++nextID; data = orig.data;
return(*this);
}
でしょうか?
↑わかってるなら「具体的にどのような定義を行っているのか」は自明なのでは?
定義と書きましたが、このオーバーロード後の挙動を理解できないというニュアンスです。分かりにくい書き方でした。
代入(operator=)されるたびにnextID(通し番号)を更新してidを書き換えています。
回答ありがとうございます。
data = orig.data;
の部分では何を行っているか分かりますでしょうか?
this->data に orig.data をコピーしています。
回答ありがとうございます。ぐだぐだな質問に回答してくださり大変助かりました。
回答1件
あなたの回答
tips
プレビュー