ほんとに💖p1.operator+(p2);💖をp1+p2;の代わりに記述して実行することができます。


皆で+演算子のオーバーロードが用いられているプログラムを眺めていますよ~ん


👇


#include <iostream>


using namespace std;


class Point{


public:

int x;

int y;


public:


void pointdisplay();


public:


Point operator+(Point p);


};


void Point::pointdisplay() {


cout << x << "\n";

cout << y << "\n";

}



Point Point::operator+(Point p)

{

Point a;


a.x = x + p.x;

a.y = y + p.y;


return a;

}




int main() {



Point p1;


p1.x = 1;

p1.y = 1;

p1.pointdisplay();



Point p2;


p2.x = 2;

p2.y = 2;

p2.pointdisplay();


Point p3;


p3 = p1 + p2;

p3.pointdisplay();


return 0;

}


プログラムの実行結果


1

1

2

2

3

3






マックス「ところで


今の話では

👇


            💖p1+p2;💖


と記述すれば


          💖p1.operator+(p2);💖


と記述されたことに等しくなるんです。


逆に言えば


          💖p1.operator+(p2);💖


実行したければ


            💖p1+p2;💖



と記述すればいいことになるんです。


👆


ということだったが


もしや


               もろに


               p1+p2;


の部分を


            🍅p1.operator+(p2);🍅


と記述しても


プログラムの実行ができたりしてなあ


にゃはははは


まさかなあ」


ソーラー「さすがに


               p1.operator+(p2);


は実行できないんじゃないかな・・・」


マックス「そう思うよな


まあ 試しに


               p1+p2;


の部分を


             🍅p1.operator+(p2);🍅


と記述して


プログラムを実行してみるか


なあ int(イント)」


int(イント)「どんなビルドエラー表示がでてくるのかな😊」


そのプログラムはこちらになります

👇

#include <iostream>


using namespace std;


class Point {


public:

int x;

int y;


public:


void pointdisplay();


public:


Point operator+(Point p);


};


void Point::pointdisplay() {


cout << x << "\n";

cout << y << "\n";

}



Point Point::operator+(Point p)

{

Point a;


a.x = x + p.x;

a.y = y + p.y;


return a;

}




int main() {



Point p1;


p1.x = 1;

p1.y = 1;

p1.pointdisplay();



Point p2;


p2.x = 2;

p2.y = 2;

p2.pointdisplay();


p3 = p1.operator+(p2);//👈🌞ここに注目 p1+p2;の代わりにp1.operator+(p2)を記述しています

p3.pointdisplay();


return 0;

}


ソーラー「それでは


             ビルドっ


                            」


マックス「!??



な、なんか黒い画面が出てきたぞ・・・


まさか・・          」




プログラムの実行結果


1

1

2

2

3

3


マックス「なにぃ


                p1+p2;


の部分を


              🍅p1.operator+(p2);🍅


と記述しても


プログラムが実行できている!!


ほんとに


引数にオブジェクトp2が代入されたオブジェクトp1のメンバ関数operator+


               p1.operator+(p2)


が存在し


いま


実行されているってことか


           『+演算子のオーバーロード』


では


ほんとに


クラスPointのメンバ関数であるoperator+関数の定義が行われているってわけだ


クラスPointのメンバ関数であるoperator+関数



説明のための仮の設定ではないんだな


これは ほんとにすごいな」


int(イント)「ほんとにぃ きゃはは」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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