🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
p1++;が実行できるよう++演算子のオーバーロードを実行するのですが どのようにoperator++関数の定義を設定してみようかな?
p1++;が実行できるよう++演算子のオーバーロードを実行するのですが どのようにoperator++関数の定義を設定してみようかな?
ソーラー「
後置演算子++
のオーバーロードか・・・
通常の後置演算子++の働きは
例えば
int型の変数aがあるとするね。
int a=1;
と
int型の変数aに数値データ1が代入されている場合
a++;
を実行すると
変数aに格納されている数値データは
2
になります
ここでさらに
int型の変数bを用意します
そのとき
b=a++;
を実行すると
変数bに格納される数値データは
いくらになるかな?」
int(イント)「そんなの簡単
a++により
変数aに格納されている数値データは
2
になるのだから
b=a++;
を実行すると
変数bに格納されている数値データは2になるんじゃない?」
ソーラー「残念
不正解で~す😊」
int(イント)「え~なんでぇ~~~」
ソーラー「
b=a++;
が実行されるとき
まず
b=a
が実行されます
だから
変数bに格納されている数値データは
1になります
その後
b=aとは
無関係に
a++
が実行されて
変数aに格納されている数値データは2になります
なぜなら
代入演算子=
は
後置演算子++
より
優先して実行されるという性質があるからなのですね。
b=a++;
の実行においては
まず
b=a
から
実行されるというわけです」
マックス「普通は
クラスPoint型のオブジェクトp1
に後置演算子++を作用させた
p1++;
を実行して
クラスPoint型のオブジェクトp1のメンバ変数
p1.x
p1.y
に格納されている数値データを
1
増やすようなことはできないんだろう?
++演算子はオブジェクトに作用する機能はないってわけだ
なので
p1++;
は実行できないってわけだ
p1++;
が実行できないなら
もちろん
別のクラスPoint型のオブジェクトp2
に
p1++
を代入する
p2=p1++:
を実行することもできないってわけだ
もちろん
p2=p1++:
を実行することはできないので
p2=p1++:
を実行できた際
代入演算子=の実行が後置演算子++の実行より優先されて
p2=p1
が実行されることにより
クラスPoint型のオブジェクトp2のメンバ変数
p2.x
p2.y
に
クラスPoint型のオブジェクトp1のメンバ変数
p1.x
p1.y
の持っている数値データが代入され
そののち
p1++
が実行されて
クラスPoint型のオブジェクトp1のメンバ変数
p1.x
p1.y
の格納している数値データが
1増えるなんてこともないわけだ」
ソーラー「
だから
クラスPoint型のオブジェクトp1
に後置演算子++を作用させた
p1++;
を実行できるよう
後置演算子++のオーバーロード(多重定義)
を実行することにより
p1++;
を実行した際
クラスPoint型のオブジェクトp1のメンバ変数
p1.x
p1.y
に格納されている数値データを
1
増やしたいというわけなんだね
そして
さらに
別のクラスPoint型のオブジェクトp2
に
p1++
を代入する
p2=p1++:
を実行した際
代入演算子=の実行が後置演算子++の実行より優先されて
p2=p1
が実行されることにより
クラスPoint型のオブジェクトp2のメンバ変数
p2.x
p2.y
に
クラスPoint型のオブジェクトp1のメンバ変数
p1.x
p1.y
の持っている数値データが代入され
そののち
p1++
が実行されて
クラスPoint型のオブジェクトp1のメンバ変数
p1.x
p1.y
の格納している数値データが
1増えるようにもしたいというわけなんだね」
🌞 🌞 🌞 🌞 🌞 🌞 🌞 🌞 🌞
後置演算子++を
クラスPoint型のオブジェクトp1に
p1++;
と
作用させる場合
どのような働きを後置演算子++にもたせ
どのような
命令文が
実行されるようにさせるかは
後置演算子++のオーバーロード(多重定義)
つまり
operator++関数の定義の設定次第なんです
で
その定義は自由に設定することができます
すごいでしょう
ふつうは
ソーラーさんのいうような
後置演算子++のオーバーロード
つまり
operator++関数の設定をするのが
いいとおもう。
あんまり
通常の
後置演算子++の働きとかけはなれたような
後置演算子++が作用すると
クラスPoint型のオブジェクトp1のメンバ変数
p1.x
p1.y
の格納している数値データが
100000000増えるような
後置演算子++のオーバーロード
つまり
operator++関数の定義を追加設定するのはよくないんですよ
あんまり
通常の
後置演算子++の働きとかけはなれたような
後置演算子++のオーバーロード
つまり
operator++関数の定義を追加して設定すると
クラスPoint型のオブジェクトp1に後置演算子++が作用された
p1++;
が実行される場合
何がおこるか
わかりにくく
ファンタジーになっちゃうの
🌞 🌞 🌞 🌞 🌞 🌞 🌞 🌞 🌞
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます