🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
引数にオブジェクト宣言が設定された自作関数が実行された場合オブジェクトのコンストラクタは実行されませんが自作関数の終了に伴いオブジェクトのデストラクタは実行されます
引数にオブジェクト宣言が設定された自作関数が実行された場合オブジェクトのコンストラクタは実行されませんが自作関数の終了に伴いオブジェクトのデストラクタは実行されます
🌞 🌞 🌞 🌞 🌞 🌞 🌞
天気がいいな~ 最高に気持ちいい~
🌞 🌞 🌞 🌞 🌞 🌞 🌞
ぶーにゃん「にゃ~~ん」
マックス「int(イント) どうだ この俺の特製そばの味は?」
int(イント)「う、うう~ん」
てんC「int(イント)さん うどんも用意してあります」
ぶーにゃん「にゃ~~ん」
int(イント)「う、ううど~ん」
マックス「だ~はっは~ よかったな~ 」
ソーラー「・・・( ^ω^)・・・
お、面白いかも・・・」
ソーラー「
さて
引数にオブジェクト宣言が設定された自作関数に
main関数内で作製されたオブジェクトを代入して
自作関数を実行してみましたね
その場合
引数にオブジェクト宣言が記述されていることにより
オブジェクトが生成されますが
オブジェクトのコンストラクタは実行されません
ですが
自作関数の実行の終了にともない
オブジェクトが消去されるときは
オブジェクトのデストラクタが実行されます
そのことを
考察してみたいと思います
次のプログラムをご覧ください
#include <iostream>
using namespace std;
class Suuti{
public:
int x;
public:
Suuti();
//👆🌞🌞🌞コンストラクタのメンバ関数宣言を行っています🌞🌞🌞
public:
void suutidisplay();
//🌞🌞🌞suutidisplay()のメンバ関数宣言を行っています🌞🌞🌞
public:
~Suuti();
//🌞🌞🌞デストラクタのメンバ関数宣言を行っています🌞🌞🌞
};
Suuti::Suuti() {
cout << "オブジェクトのコンストラクタが実行されました" << "\n";
}
//👆🌞🌞🌞コンストラクタの定義を行っています🌞🌞🌞
Suuti::~Suuti() {
cout << "オブジェクトのデストラクタが実行されました" << "\n";
}
//👆🌞🌞🌞デストラクタの定義を行っています🌞🌞🌞
void newmadefunction(Suuti a) {
cout << "自作関数が実行されました" << "\n";
cout << a.x << "\n";
}
//👆🌞🌞🌞自作関数newmadefunctionの引数としてaのSuuti型のオブジェクト宣言Suuti aを行っています🌞🌞🌞
int main() {
Suuti b;
b.x = 1;
newmadefunction(b);
return 0;
}
プログラムの実行結果
オブジェクトのコンストラクタが実行されました
自作関数が実行されました
1
オブジェクトのデストラクタが実行されました
オブジェクトのデストラクタが実行されました
マックス「なになに
順を追っていくと・・
このプログラムでは
まず
Suuti b;
によりクラスSuuti型のオブジェクトbが作製されているんだろう
なので
クラスSuuti型のオブジェクトbのメンバ関数である
クラスSuuti型のオブジェクトbのコンストラクタ
が実行されて
コマンドプロンプト画面に
オブジェクトのコンストラクタが実行されました
が表示されるわけだ
そして
クラスSuuti型のオブジェクトbのメンバ変数
b.xに数値データ1が代入されている
次に
newmadefunction(b);
が実行されると
クラスSuuti型のオブジェクトbが
自作関数newmadefunctionの引数となっている
クラスSuuti型のオブジェクト宣言
Suuti a
に代入された状態で
自作関数newmadefunctionの定義
👇
void newmadefunction(Suuti a) {
cout << "自作関数が実行されました" << "\n";
cout <<a.x << "\n";
}
内の
命令文
cout << "自作関数が実行されました" << "\n";
cout <<a.x << "\n";
が実行されるんだろう」
ソーラー「そうなんです
そして
自作関数の引数となっている
クラスSuuti型のオブジェクト宣言
Suuti a
に
main関数内で作製されたクラスSuuti型のオブジェクトbが代入されると
クラスSuuti型のオブジェクトaのメンバ変数
a.x
に
クラスSuuti型のオブジェクトbのメンバ変数
b.x
が持っている数値データ1が代入されます
ですので
cout << "自作関数が実行されました" << "\n";
cout <<a.x << "\n";
が実行されると
自作関数が実行されました
1
が
コマンドプロンプト画面に表示されることになります
このとき!
クラスSuuti型のオブジェクト宣言
Suuti a
が実行されているので
クラスSuuti型のオブジェクトaのコンストラクタが実行されて
オブジェクトのコンストラクタが実行されました
が
コマンドプロンプト画面に表示されそうなものですが
表示されません
しかし
自作関数newmadefunctionの実行終了にともない
クラスSuuti型のオブジェクトaが消去されるとき
クラスSuuti型のオブジェクトaのデストラクタが実行されて
オブジェクトのデストラクタが実行されました
が
コマンドプロンプト画面に表示されます
つまり
引数にオブジェクト宣言が設定された自作関数に
main関数内で作製されたオブジェクトを代入して
自作関数を実行した場合
引数のオブジェクト宣言によって生成されるオブジェクトのメンバ変数に
main関数内で生成されたオブジェクトのメンバ変数が格納している値が代入される
値渡しが実行されますが
そのとき
引数のオブジェクト宣言により生成されるオブジェクトのコンストラクタは
実行されませんが
自作関数の実行終了にともない
引数のオブジェクト宣言により生成されるオブジェクトが消去されると
オブジェクトのデストラクタは
実行されることになります」
マックス「ふ~ん そういう仕組みなのか」
ソーラー「そして
プログラムの実行が終了すると
main関数内で
クラスSuuti型のオブジェクト宣言
Suuti b;
により
生成されたクラスSuuti型のオブジェクトb
が
消去されます
そのとき
クラスSuuti型のオブジェクトbのコンストラクタが
実行されて
オブジェクトのデストラクタが実行されました
がコマンドプロンプト画面に表示されます
結局
クラスSuuti型のオブジェクトaのデストラクタ
クラスSuuti型のオブジェクトbのデストラクタ
の実行により
オブジェクトのデストラクタが実行されました
が連続して
オブジェクトのデストラクタが実行されました
オブジェクトのデストラクタが実行されました
が
コマンドプロンプト画面に表示されていますね」
マックス「
クラスSuuti型のオブジェクトaのデストラクタ
クラスSuuti型のオブジェクトbのデストラクタ
の違いってなんだ?
」
int(イント)「?そうだね なんだろう」
ソーラー「
クラスSuuti型のオブジェクトaのデストラクタ
は
クラスSuuti型のオブジェクトaのメンバ関数なんです
今のプログラムのように
自作関数の実行にともない
クラスSuuti型のオブジェクトaが生成されて
自作関数の実行終了にともない
クラスSuuti型のオブジェクトaが消去されるとき
クラスSuuti型のオブジェクトaのメンバ関数であるデストラクタが実行されます
そのとき
クラスSuuti型のオブジェクトaのメンバ変数a.xが
クラスのメンバ関数であるデストラクタの定義
👇
Suuti::~Suuti() {
cout << "オブジェクトのデストラクタが実行されました" << "\n";
}
内の
クラスのメンバ変数xの部分に代入されたものが実行されます
が
このデストラクタの定義には
クラスのメンバ変数xが記述されていないので
そのまま
cout << "オブジェクトのデストラクタが実行されました" << "\n";
が実行されて
コマンドプロンプト画面に
オブジェクトのデストラクタが実行されました
が表示されることになります
同様に
クラスSuuti型のオブジェクトbのデストラクタ
は
クラスSuuti型のオブジェクトbのメンバ関数なんです
今のプログラムのように
main関数の実行にともない
クラスSuuti型のオブジェクトbが生成されて
main関数の実行終了にともない
クラスSuuti型のオブジェクトbが消去されるとき
クラスSuuti型のオブジェクトbのメンバ関数であるデストラクタが実行されます
そのとき
クラスSuuti型のオブジェクトbのメンバ変数b.xが
クラスのメンバ関数であるデストラクタの定義
👇
Suuti::~Suuti() {
cout << "オブジェクトのデストラクタが実行されました" << "\n";
}
内の
クラスのメンバ変数xの部分に代入されたものが実行されます
が
このデストラクタの定義には
クラスのメンバ変数xが記述されていないので
そのまま
cout << "オブジェクトのデストラクタが実行されました" << "\n";
が実行されて
コマンドプロンプト画面に
オブジェクトのデストラクタが実行されました
が表示されることになります」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます