p1++;が実行できるよう++演算子のオーバーロードを実行するのですが どのようにoperator++関数の定義を設定してみようかな? 

ソーラー「


後置演算子++

のオーバーロードか・・・


通常の後置演算子++の働きは


例えば


int型の変数aがあるとするね。


int a=1;



int型の変数aに数値データ1が代入されている場合


a++;


を実行すると


変数aに格納されている数値データは


2


になります


ここでさらに


int型の変数bを用意します


そのとき


b=a++;


を実行すると


変数bに格納される数値データは


いくらになるかな?」


int(イント)「そんなの簡単


a++により


変数aに格納されている数値データは



になるのだから


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++;


が実行される場合


何がおこるか


わかりにくく


ファンタジーになっちゃうの


🌞   🌞   🌞   🌞   🌞   🌞   🌞   🌞   🌞

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る