代入演算子=のオーバーロードを実行してみます どのようなときに代入演算子のオーバーロードは実行されるのでしょうか?

ソーラー「コピーコンストラクタの仕組みについて考察してきました


準備は整ったね


さあ、


いよいよ



    代入演算子=のオーバーロードを実行してみよう

                   

     」



🌞    🌞    🌞    🌞    🌞    🌞



          今度のファンタジアンさんは



           代入演算子=さんです



🌞    🌞    🌞    🌞    🌞    🌞



ソーラー「


クラスSuutitoMojiに


コピーコンストラクタが設定されたプログラムを


見てきましたが


今度は


代入演算子=のオーバーロードを実行してみたいと思います」


int(イント)「代入演算子=のオーバーロードってなんのこと?」


ソーラー


「代入演算子=のオーバーロード(多重定義)とは


代入演算子=に新たな機能を追加するための定義をおこなうということなんですが


いままでの代入演算子=の機能をかきかえることもできます


そうですね



         代入演算子=のオーバーロード


とは・・・


通常


int型の変数cには


int型の変数dを


c=d;


のように代入できます


代入演算子=の基本的な仕組みです



さあて


次のようなクラス


class SuutitoMoji{


public:


int x;


public:


char* i;


};


があるとします


このクラスSuutitoMojiを用いた


aのクラスSuutitoMoji型のオブジェクト宣言


SuutitoMoji a;


bのクラスSuutitoMoji型のオブジェクト宣言


SuutitoMoji b;


を実行し


クラスSuutitoMoji型のオブジェクトa



クラスSuutitoMoji型のオブジェクトb



作製します


さらに



b.x=1;


b.i=new char[50];


(b.iによってメモリ領域が動的に確保されました


b.iにはb.iによって動的に確保されたメモリ領域の先頭のメモリのアドレスが格納されます)


strcpy_s(b.i, 50, "にゃこ");


(b.iによって動的に確保されたメモリ領域に文字列データ"にゃこ"が


格納されます)


を実行した後



クラスSuutitoMoji型のオブジェクトa

クラスSuutitoMoji型のオブジェクトbの格納しているデータを代入する


              a=b;


を実行してみます



             通常



クラスSuutitoMoji型のオブジェクトa

クラスSuutitoMoji型のオブジェクトbの格納しているデータを代入する


              a=b;


を実行したとき


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.xの格納している数値データ1



クラスSuutitoMoji型のオブジェクトaのメンバ変数a.xに代入され


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.i


に格納されているアドレスが


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.i


に代入されます





さて



ここで


           😊うまい具合に😊


         代入演算子=のオーバーロード


を実行すれば


              a=b;


を実行したとき


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.x

には

クラスSuutitoMoji型のオブジェクトbのメンバ変数b.xの格納している数値データ1


が代入されて


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iには


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iに格納されているアドレスが


🌞代入されないようにすることもできます🌞


                                 」



マックス「なにぃ 


              a=b;


を実行したとき




クラスSuutitoMoji型のオブジェクトaのメンバ変数a.x

には

クラスSuutitoMoji型のオブジェクトbのメンバ変数b.xの格納している数値データ1



             🌞代入されて🌞


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iには


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iに格納されているアドレスが




         🌞代入されないようにすることができる🌞のか???



なんだ?


なんで?


なにがしたい?


なんか


トリッキーなかんじだな


そんなことができるのか?


かなり難しくないか?」


ソーラー「できるんだな~


      代入演算子=のオーバーロードを実行すれば


             代入演算子=


の機能を変更することができるんだけど


代入演算子=のオーバーロードの定義をうまく設定して



              a=b;


を実行したとき


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.x

には

クラスSuutitoMoji型のオブジェクトbのメンバ変数b.xの格納している数値データ1


が代入されて


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iには


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iに格納されているアドレスが


🌞代入されないようにすることもできます🌞


そのオーバーロードの定義は難しくありません



では


なぜ


代入演算子=のオーバーロードを実行するのか?


どのようなときに


代入演算子のオーバーロードを実行するのか?



一緒に見ていきたいと思います


まず


次のクラスSuutitoMojiをご覧ください

👇


class SuutitoMoji{


public:


int x;


public:


char* i;


};




ソーラー「このクラスSuutitoMojiをもちいて


bのクラスSuutitoMoji型のオブジェクト宣言


SuutitoMoji b;


を実行してクラスSuutitoMoji型のオブジェクトbを作製し


生成される


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.xに


b.x = 1;


により


1を代入したとします


そして


b.i = new char[50];


を実行することにより


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて


動的にメモリ領域を確保したとします


このとき


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iには動的に確保したメモリ領域の先頭のメモリのアドレスが


代入されることになります


そして


動的に確保したメモリ領域に文字列データを格納するには


strcpy_s関数を用いるのでしたね


strcpy_s(b.i,50, "にゃこ");


が実行されると


b.iによって動的に確保されたメモリ領域に


文字列データ


"にゃこ"


が格納されることになります



ところで


このとき


クラスSuutitoMoji型のオブジェクトaにクラスSuutitoMoji型のオブジェクトbを代入する


a = b;


を実行してみたいとおもいます


なぜ


クラスSuutitoMoji型のオブジェクトaにクラスSuutitoMoji型のオブジェクトbを代入する


a = b;


を実行する必要がある?と


みなさん


おもわれますか?」


マックス「それは(^^)/もちろん


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.xに


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.xの格納している数値データ1を


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iに


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iの格納している動的に確保されたメモリ領域の先頭のメモリのアドレスを


代入するためだろう?


おっ


そうだ ひらめいた


だったら


a = b;


を実行しなくても


SuutitoMoji b ;


b.x = 1;


b.i = new char[50];


strcpy_s(b.i,50, "にゃこ");


のあと


SuutitoMoji a ;


a.x=b.x;

a.i=b.i;


を実行したらいいんじゃないか?」


ソーラー「そうですね


う~んん 実にいいアイデアですね


もちろんその通りです


もう解答が出ちゃったかな?」


マックス「にゃ??にゃんのこと?」


ソーラー「



ところで


次のように


クラスSuutitoMojiのメンバ変数が


24個あるとします



その時のクラスSuutitoMojiのクラス宣言はこんな感じです

👇

class SuutitoMoji{


public:


int c;

int d;

int e;

int f;

int g;

int h;

int j;(int i;はないです なぜなら  char* iでiが使われているからです)

int k;

int l;

int m;

int n;

int o;

int p;

int q;

int r;

int s;

int t;

int u;

int v;

int w;

int x;

int y;

int y;

int z;


public:


char* i;


};


ソーラー「


このとき


このクラスSuutitoMojiを用いた


bのクラスSuutitoMoji型のオブジェクト宣言


SuutitoMoji b;


を行い


生成される


クラスSuutitoMoji型のオブジェクトbのメンバ変数


b.c

b.d

b.e

b.f

b.g

b.h

b.j

b.k

b.l

b.m

b.n

b.o

b.p

b.q

b.r

b.s

b.t

b.u

b.v

b.w

b.g

b.y

b.z


b.c=1;

b.d=2;

b.e=3;

b.f=4;

b.g=5;

b.h=6;

b.j=7;

b.k=8;

b.l=9;

b.m=10;

b.n=11;

b.o=12;

b.p=13;

b.q=14;

b.r=15;

b.s=16;

b.t=17;

b.u=18;

b.v=19;

b.w=20;

b.x=21;

b.y=22;

b.z=23;


を実行することにより



数値データ

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

代入したとします



そして


b.i = new char[50];


を実行することにより


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて


動的にメモリ領域を確保したとします


このとき


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iには動的に確保したメモリ領域の先頭のメモリのアドレスが


代入されることになります


動的に確保したメモリ領域に文字列データを格納するには


strcpy_s関数を用いるのでしたね


strcpy_s(b.i,50, "にゃこ");


が実行されると


b.iによって動的に確保されたメモリ領域に


文字列データ


"にゃこ"


が格納されることになります


ここで


クラスSuutitoMoji型のオブジェクトa



クラスSuutitoMoji型のオブジェクトbを代入する


a=b;


を実行すれば


クラスSuutitoMoji型のオブジェクトaのメンバ変数


a.c

a.d

a.e

a.f

a.g

a.h

a.j

a.k

a.l

a.m

a.n

a.o

a.p

a.q

a.r

a.s

a.t

a.u

a.v

a.w

a.x

a.y

a.z

クラスSuutitoMoji型のオブジェクトbのメンバ変数


b.c

b.d

b.e

b.f

b.g

b.h

b.j

b.k

b.l

b.m

b.n

b.o

b.p

b.q

b.r

b.s

b.t

b.u

b.v

b.w

b.x

b.y

b.z

が代入され


クラスSuutitoMoji型のオブジェクトbのメンバ変数


b.c

b.d

b.e

b.f

b.g

b.h

b.j

b.k

b.l

b.m

b.n

b.o

b.p

b.q

b.r

b.s

b.t

b.u

b.v

b.w

b.x

b.y

b.z

が格納している


数値データ

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

クラスSuutitoMoji型のオブジェクトaのメンバ変数


a.c

a.d

a.e

a.f

a.g

a.h

a.j

a.k

a.l

a.m

a.n

a.o

a.p

a.q

a.r

a.s

a.t

a.u

a.v

a.w

a.x

a.y

a.z


に代入されることになります


そして


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.i


には


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iが格納している(動的に確保されたメモリ領域の先頭のメモリの)アドレスが代入されることになります


a=b;


を実行すれば


簡単に


クラスSuutitoMoji型のオブジェクトbのメンバ変数が格納しているデータを


クラスSuutitoMoji型のオブジェクトaのメンバ変数に代入することができますね」



マックス「ふつうにそうだよなあ」



ソーラー「


クラスSuutitoMoji型のオブジェクトbのメンバ変数が格納しているデータを


クラスSuutitoMoji型のオブジェクトaのメンバ変数に代入するのに


a=b;


を実行するのでなく


SuutitoMoji b ;


b.x = 1;


b.i = new char[50];


strcpy_s(b.i,50, "にゃこ");


SuutitoMoji a ;


a.c=b.c;

a.d=b.d;

a.e=b.e;

a.f=b.f;

a.g=b.g;

a.h=b.h;

a.j=b.j;

a.k=b.j;

a.l=b.l;

a.m=b.m;

a.n=b.n;

a.o=b.o;

a.p=b.p;

a.q=b.q;

a.r=b.r;

a.s=b.s;

a.t=b.t;

a.u=b.u;

a.v=b,v;

a.w=b.w;

a.x=b.x;

a.y=b.y;

a.z=b.z;

a.i=b.i;


を実行する方法がありますが


とても手間ですね


そこで


a=b;


を実行するというわけです


この便利さが


a=b;


を実行する意味というわけだね


お話は変わって


ふたたび


最初に設定された


クラスSuutitoMojiをご覧ください」

👇


class SuutitoMoji{


public:


int x;


public:


char* i;


};



ソーラー「このクラスSuutitoMojiを用いて



bのクラスSuutitoMoji型のオブジェクト宣言


SuutitoMoji b;


を実行して


クラスSuutitoMoji型のオブジェクトbを生成し


b.x = 1;


により


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.xに数値データ1を代入したとします


そして


b.i = new char[50];


を実行することにより


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて


動的にメモリ領域を確保したとします


このとき


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iには


動的に確保したメモリ領域の先頭のメモリのアドレスが


代入されることになります


動的に確保したメモリ領域に文字列データを格納するには


strcpy_s関数を用いるのでしたね


strcpy_s(b.i,50, "にゃこ");


が実行されると


b.iによって動的に確保されたメモリ領域に


文字列データ


"にゃこ"


が格納されることになります



このとき


クラスSuutitoMoji型のオブジェクトaにクラスSuutitoMoji型のオブジェクトbを代入する


a = b;


を実行すると


a.x=b.x;

a.i=b.i;

が実行されて


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.xには


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.xが格納している数値データ1が


格納され


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iには


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iが格納しているアドレスが


つまり


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて動的に確保されたメモリ領域の先頭のメモリのアドレスが


格納されることになります


ところで


          みなさん



クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて動的にメモリを確保したのは


なぜだと思われますか?」


int(イント)「はいは~い😊


一般的にっ


動的にメモリ領域を確保するのは


メモリ領域に格納されたデータを利用したら


すぐに


動的に確保されたメモリ領域を解放して


コンピュータがそのメモリ領域を使用できるようにして


コンピュータが利用できるメモリ容量を増やすためなんでしょう


だから


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて動的にメモリ領域を確保したのは


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて


動的に確保されたメモリ領域に格納されたデータ


を利用したら


すぐに


動的に確保されたメモリ領域を解放して


コンピュータがそのメモリ領域を使用できるようにして


コンピュータが利用できるメモリ容量を増やすためなんでしょう😊」



ソーラー「そうなんです


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて


動的に確保されたメモリ領域に格納されたデータを


利用したら


コンピュータが利用できるメモリ容量をふやすため


すぐに


動的に確保されたメモリ領域を解放することになるのですが


そのとき


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて


動的に確保されたメモリ領域を解放する命令文は


delete b.i;


となります


delete b.i;


が実行されると


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.i自体p


は消去されませんが



クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iによって動的に確保されたメモリ領域に格納された文字列データ


"にゃこ"



メモリ領域から消去されます


ですので


その解放されたメモリ領域は文字列データによって初期化されていないことになります


〇〇

通常


char*型のポインタ変数aを用いて


動的に確保されたメモリ領域を


delete a;


を実行して


解放すると


ポインタ変数a自体


は消去されませんが


ポインタ変数aを用いて


動的に確保されたメモリ領域に格納されたデータ


は消去されます


同様に


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて


動的に確保されたメモリ領域を


delete b.i;


を実行して解放する場合は


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.i


は消去されませんが



クラスSuutitoMoji型のオブジェクトbを用いて動的に確保されたメモリ領域に格納されているデータは消去されます


ですので


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iに格納されているアドレスのメモリを先頭とするメモリ領域に格納されている文字列データを表示する命令文


cout<<b.i<<"\n";


を実行しても


b.iによって確保されたメモリ領域には何もデータが代入されていないので(何らかのデータ情報は格納されています)



なんだかよくわからないデータが表示されることになります


(クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて


b.i = new char[50];


を実行し


動的に確保されたメモリ領域を


delete b.i;


を実行して解放する場合は


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iは消去されないので


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iが用いられた


cout<<b.i<<"\n";


を実行することはできます)          


          このとき




面白い現象がおこります




a,iにはb.iによって動的に確保されたメモリ領域の先頭のメモリのアドレスが格納されたままなので



cout<<a.i<<"\n";



実行すると


b.iによって動的に確保されたメモリ領域に格納されたデータが


表示されることになりますが


delete b.i;


により


b.iによって動的に確保されたメモリ領域に格納された文字列データ


"にゃこ"


は消去されているので


コマンドプロンプト画面には


にゃこ


ではなく


代わりに


b.iによって動的に確保されたメモリ領域にデータが代入されていないときのデータが


表示されることになります


そのことを示すプログラムはこちらです

👇

#include <iostream>


using namespace std;


class SuutitoMoji{


public:


int x;


public:


char* i;



};



int main() {


SuutitoMoji b;


b.x = 1;

b.i = new char[50];


strcpy_s(b.i, 50, "にゃこ");


SuutitoMoji a;


a = b;



cout << a.i << "\n";

cout << b.i << "\n";


delete b.i;

cout << a.i << "\n";

cout << b.i << "\n";


return 0;

}


ビルド実行結果


にゃこ

にゃこ

ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン^諏・D

ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン^諏・D

(👆どのような文字列データが表示されるかはメモリの使用状況により異なってきます)




ソーラー「このプログラムでは


bのクラスSuutitoMoji型のオブジェクト宣言


SuutitoMoji b;


を実行してクラスSuutitoMoji型のオブジェクトbを作製し


b.x = 1;


により


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.xに1を代入しています


そして


b.i = new char[50];


を実行することにより


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて


動的にメモリを確保しています


このとき


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iには


動的に確保したメモリ領域の先頭のメモリのアドレスが


代入されることになります


動的に確保したメモリ領域に文字列データを格納するには


strcpy_s関数を用いるのでしたね


strcpy_s(b.i,50, "にゃこ");


が実行されると


b.iによって動的に確保されたメモリ領域に


文字列データ


"にゃこ"


が格納されることになります


このとき


クラスSuutitoMoji型のオブジェクトaにクラスSuutitoMoji型のオブジェクトbを代入する


a = b;


を実行すると


a.x=b.x;

a.i=b.i;

が実行されて


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.xには


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.xが格納している数値データ1が


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iには


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iが


つまり


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iには


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて動的に確保されたメモリ領域の先頭のメモリのアドレスが


格納されることになります」




マックス「


となると・・・


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて動的に確保したメモリ領域を


delete b.i;


を用いて


解放すると


b.iを用いて動的に確保したメモリ領域に格納された文字列データは


消去される・・・


そして・・・



クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iは


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて動的に確保したメモリ領域の先頭のメモリのアドレスを格納しているので


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iを用いた


cout<<a.i<<"\n";


を実行した場合でも


コマンドプロンプト画面には


にゃこ


ではなく


代わりに


b.iによって動的に確保されたメモリ領域に文字列データが代入されていないときのデータ


ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン^諏・D



表示されることになるってわけか」


ソーラー「そうなんです


まあ 当然といえば


当然なんですが


delete b.i;


を実行して


b.iによって動的に確保されたメモリ領域が解放されるのはいいんですが


cout<<a.i<<"\n";


のビルド実行結果までが


にゃこ


から


ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン^諏・D


になるのは


a = b;


を実行することにより


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.i


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.i


ともに


同じ


クラスSuutitoMoji型のオブジェクトbのメンバ変数b.iを用いて動的に確保したメモリ領域の先頭のメモリのアドレスを


格納することになるからです


ここで


delete b.i;


を実行して


b.iによって動的に確保されたメモリ領域が解放されて



b.iによって動的に確保されたメモリ領域に格納された文字列データ"にゃこ"が消去されても


cout<<a.i<<"\n";


のビルド実行結果として


にゃこ


が表示されるようにするためには



a = b;


が実行されたとき


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.i

クラスSuutitoMoji型のオブジェクトbのメンバ変数b.i


の格納しているアドレスが異なっていて


なおかつ


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iの格納しているアドレスのメモリを先頭とするメモリ領域に格納されている文字列データ

(クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iのアクセスするメモリ領域に格納されている文字列データ)



"にゃこ"


である必要があります


それなら


b.iによって動的に確保されたメモリ領域が解放されて


b.iによって動的に確保されたメモリ領域に格納された文字列データ"にゃこ"が消去されても


cout<<a.i<<"\n";


のビルド実行結果として


にゃこ


が表示されることになります


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iの格納しているアドレスのメモリを先頭とするメモリ領域に格納されている文字列データ

(クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iのアクセスするメモリ領域に格納されている文字列データ)



"にゃこ"


であるようにするためには


やはり


a=b;


を実行して


a.i=b.i;


が実行されるようにすればいい・・・と思う?


a.i=b.i;


が実行されれば


a.i


b.iを用いて動的に確保したメモリ領域の先頭のメモリのアドレスが


代入されるので


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.iをもちいた


cout<<a.i<<"\n";


のビルド実行結果として


にゃこ


が表示されることになります


しかし


クラスSuutitoMoji型のオブジェクトbのメンバ変数


b.iを用いて


動的にメモリ領域を確保した後



クラスSuutitoMoji型のオブジェクトaに


クラスSuutitoMoji型のオブジェクトbを代入する


a = b;



実行しているのに


つまり


a.i=b.i;


が実行されているのに


クラスSuutitoMoji型のオブジェクトaのメンバ変数a.i



クラスSuutitoMoji型のオブジェクトbのメンバ変数b.i


の格納しているアドレスが異なっているようにすることは


ふつうはできないはずです


そこで


代入演算子=の機能に手を加える


代入演算子=のオーバーロードの登場というわけです」






























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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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