🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
注意点 コピーコンストラクタを設定する際にはあらかじめコンストラクタが設定されている必要があります そうしなければプログラムを実行することができなくなります
注意点 コピーコンストラクタを設定する際にはあらかじめコンストラクタが設定されている必要があります そうしなければプログラムを実行することができなくなります
つづき・・・
ソーラー「
実は
クラス宣言内に
コピーコンストラクタを設定する際には注意点があるんだよ
それは
クラス宣言内に
コピーコンストラクタを設定する際には
あらかじめ
コンストラクタを設定しておく必要があるんです
そうでないと
オブジェクト宣言、初期化を実行しても
オブジェクトのコピーコンストラクタが実行されなくなります
まずは次のプログラムをご覧ください
#include <iostream>
using namespace std;
class Suuti{
public:
int x;
public:
Suuti();
//👆🌞🌞🌞コンストラクタのメンバ関数宣言を行っています🌞🌞🌞
public:
Suuti(Suuti& c);
//👆🌞🌞🌞コピーコンストラクタのメンバ関数宣言を行っています🌞🌞🌞
};
Suuti::Suuti() {
cout << "オブジェクトのコンストラクタが実行されました" << "\n";
}
//👆🌞🌞🌞コンストラクタの定義を行っています🌞🌞🌞
Suuti::Suuti(Suuti& c) {
cout << "オブジェクトのコピーコンストラクタが実行されました" << "\n";
cout << c.x << "\n";
x = c.x;
}
//👆🌞🌞🌞コピーコンストラクタの定義を行っています🌞🌞🌞
int main() {
Suuti b;
b.x = 1;
Suuti a = b;
cout << a.x << "\n";
return 0;
}
プログラムの実行結果
オブジェクトのコンストラクタが実行されました
オブジェクトのコピーコンストラクタが実行されました
1
1
ソーラー「このプログラムでは
bのクラスSuuti型のオブジェクト宣言
Suuti b;
を実行することにより
クラスSuuti型のオブジェクトbのコンストラクタが実行されています
b.x = 1;
の実行後
aのクラスSuuti型のオブジェクト宣言、初期化
Suuti a = b;
を実行することにより
クラスSuuti型のオブジェクトaのコピーコンストラクタが実行されています
aのクラスSuuti型のオブジェクト宣言、初期化
💖Suuti a = b;💖
が実行されると
💖 クラスSuuti型のオブジェクト
が実行されます
そのとき
コピーコンストラクタの定義の
👇
Suuti::Suuti(Suuti& c) {
cout << "オブジェクトのコピーコンストラクタが実行されました" << "\n";
cout << c.x << "\n";
x = c.x;
}
👆
Suuti& cにbが
xに
オブジェクトaのメンバ変数
a.x
が代入された
cout << "オブジェクトのコピーコンストラクタが実行されました" << "\n";
cout << b.x << "\n";
a.x = b.x;
が実行されることになります
b.xには1が代入されているので
オブジェクトのコピーコンストラクタが実行されました
1
が表示されることになります
このとき
クラスSuuti内の
コンストラクタのメンバ関数宣言
と
コンストラクタの定義
を取り除いてしまうと
プログラム自体が実行できなくなります
そのことを示すプログラムをご覧ください」
👇
#include <iostream>
using namespace std;
class Suuti{
public:
int x;
public:
Suuti(Suuti& c);
//👆🌞🌞🌞コピーコンストラクタのメンバ関数宣言を行っています🌞🌞🌞
};
Suuti::Suuti(Suuti& c) {
cout << "オブジェクトのコピーコンストラクタが実行されました" << "\n";
cout << c.x << "\n";
x = c.x;
}
//👆🌞🌞🌞コピーコンストラクタの定義を行っています🌞🌞🌞
int main() {
Suuti b;
b.x = 1;
Suuti a = b;
cout << a.x << "\n";
return 0;
}
プログラムの実行結果
エラー (アクティブ) E0291 クラス "Suuti" の既定のコンストラクターは存在しません
エラー C2512 'Suuti': クラス、構造体、共用体に既定のコンストラクターがありません。
マックス「ほう、そんな仕組みになっているとはな🌷」
てんC「コンストラクタさんを設定しないと
コピーコンストラクタさんを設定しても実行できないのですね。こんこん🦊🦊」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます