2018年01月07日
《その223》 クラスオブジェクトの初期化(初歩的 (・・。)ゞ
クラスオブジェクトの初期化の際の記述方法について、再確認してみました。
初歩的な内容ですみません。
自分の中で、ちょっとあいまいになっていたことがあって・・・(´・ω・`) ちょっと恥ずかしい話ですが、「プログラムの (3) の書き方だと代入演算子が呼ばれたりしないか」と不安になってしまったんです。
でも、ちゃんとコピーコンストラクタだけで初期化していることがわかって安心しました。自分の場合、こういう基本的な部分がダメですね。基本がダメなら応用もダメですよね。自信無くします。というか、もともと自信ありません。
(3) を確認したついでに、(6),(7) の確認もしてみました。
(6) の場合の関数 f1 は、オブジェクトを受け取り、オブジェクトを返却します。
(7) の場合の関数 f2 は、参照を受け取り、参照を返却します。
大きいクラスだと、確かに、コスト的に差が出そうですね。
// ------------------------------------
#include <iostream>
using namespace std;
class C {
int n;
public:
C(int x = 0) : n(x) {
cout << "☆ コンストラクタ\n";
}
C(const C& x) {
cout << "◇ コピーコンストラクタ\n";
n = x.n;
}
C& operator=(const C& x) {
cout << "▽ 代入演算子\n";
n = x.n;
return *this;
}
};
C f1(C x) {
cout << " @@@\n";
return x;
}
C& f2(C& x) {
return x;
}
int main() {
cout << "(1) "; C a(100);
cout << "(2) "; C b;
cout << "(3) "; C c = a;
cout << "(4) "; C d(a);
cout << "(5) "; b = a;
cout << "\n(6)\n";
b = f1(a);
cout << "\n(7)\n";
b = f2(a);
}
// ------------------------------------
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7167508
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック