そもそも+演算子のオーバーロードに登場してくる😊operator+関数とはなんなのか?😊

マックス「このプログラムが


+演算子に新たな機能を追加する


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


の実例というわけだ」

👇


#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


マックス「ここまできたか・・・


見ろ


main関数内の


p3 = p1 + p2;


を🌞


いい命令文じゃないか?



            p3 = p1 + p2;



美しいな


+演算子のオーバーロードが設定されているからこそ


クラスPoint型のオブジェクト同士の足し算


p3 = p1 + p2;



実行できるというわけだ。」


ソーラー「そして


    💖クラスPoint型のオブジェクト同士の足し算💖


           💖 p1 + p2;💖


          💖が実行される際💖


    💖どのような処理がおこなわれるのかを定めているのが💖


このプログラムのoperator+のメンバ関数の定義である

👇

Point Point::operator+(Point p)

{

Point a;


a.x = x + p.x;

a.y = y + p.y;


return a;

}

👆

の部分というわけなんだね。」


てんC「


Point Point::operator+(Point p)

{

Point a;


a.x = x + p.x;

a.y = y + p.y;


return a;

}



      +演算子に追加される機能の定義であり


           そして


      operator+関数の定義なのです


そのoperator+関数のプロトタイプ宣言が


クラスPointのクラス宣言内で


Point operator+(Point p);



記述されているというわけなのですね。」


マックス「さて ここからだな😊


Point Point::operator+(Point p)

{

Point a;


a.x = x + p.x;

a.y = y + p.y;


return a;

}



    +演算子に追加された機能の定義であり


           そして


      operator+関数の定義なんだが



           なぜ


このように記述するのか?


          そして


          そもそも



        😊operator+関数とはなんなのか?😊


まさにぃ


        『C++言語はファンタジー』


面白くなってきたな!」


ソーラー「あ、それ ずっと思ってたんです


だって


プログラム


#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



よくご覧になってください。」


ぶーにゃん「にゃ~ん😸」


ソーラー「見る所はね😊


ネコちゃん


main関数のブロック{}の中です」


ぶーにゃん「にゃ~ん😸」


ソーラー「


              実は


            🐈どこにも🐈


       😽operator+と記述されている箇所がありません😽



          operator+関数は登場してこないんです




                                  」


てんC「しかし


          operator+関数の定義を


行っている以上


            どこかで


            operator+関数




 実行されていると思われます」



マックス「


p1+p2;



の部分が



なんか もう


猛烈に関係しているっぽいな~



🌞   🌞   🌞   🌞   🌞   🌞   🌞



         そう いい感じです。

        

そこは


       ちょちょっと~


       おいておいて~~~(´▽`*)


       そこは面白いところなのぉ


一応  ヒントは・・・


        p1+p2;


が記述されていると・・・


何がおきるのかというと


          

   p2を引数とするオブジェクトp1のメンバ関数operator+


       が実行されることになるんです😊・・・・・




でも


          その解説は



      もうちょっと  あとにとっておこうよ


       

          🌞お楽しみに💖🌞



             まずは


      +演算子に追加された機能の定義であり


             そして


           operator+関数の定義

👇

Point Point::operator+(Point p)

{

Point a;


a.x = x + p.x;

a.y = y + p.y;


return a;

}

👆


            なぜ


このような形式で記述されているのかというところ


から


         は・じ・め・てみようよ!


                           」


🌞   🌞   🌞   🌞   🌞   🌞   🌞



ソーラー「面白くなってきたね るんるん(#^^#) 」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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