普通の自作関数operator+を定義して+演算子のオーバーロードを行い5+p1;を実行してみます 何が実行されるかは自作関数operator+の定義次第ですね

ソーラー「ねえ、みんな🌞


クラスPoint型の


オブジェクトp1

数値5


同士の足し算


p1+5;


が記述されたとき


クラスPoint型のオブジェクトp1のメンバ変数

p1.x

p1.y

数値

5

5

同士の足し算


p1.x+5

p1.y+5


が実行されるよう


自作関数operator+関数を定義することができたね💡 


その時の定義はこちらです。

👇


Point operator+(Point p,int b){


Point a;


a.x=p.x+b;

a.y=p.y+b;


return a;

}


マックス「意外と普通な感じに


自作関数operator+関数の定義を


設定することができたな


p1+5;


実行されると


operator+(p1,5);


が実行されるんだろう」


てんC「


p1+5;


実行されると


operator+(p1,5);


が実行されるのですが


p1+5;


と記述してあっても


必ず


クラスPoint型のオブジェクトp1のメンバ変数

p1.x

p1.y


クラスPoint型のオブジェクトp2のメンバ変数

5

5

同士の足し算


p1.x+5

p1.y+5


が実行されるのではなく


p1+5;


が記述されたとき


どのような命令文が実行されるかは


自作関数operator+関数の定義次第ということになりますね。」



ソーラー「そうなんだ。


そこで


今度は


p1+5;


ではなく


5+p1;


が実行できるようにしてみたいと思うんだ。」


てんC「5+p1;


ですか?


5+p1;


が記述されたときも


どのような命令文が実行されるかは


自作関数operator+関数の定義次第ということになりますね」


ソーラー「


そう


そこで


数値データ5



クラスPoint型の


オブジェクトp1


同士の足し算


5+p1;


が記述されたとき


数値データ

5

5

クラスPoint型のオブジェクトp1のメンバ変数

p1.x

p1.y

の足し算


5+p1.x

5+p1.y


が実行されるよう


自作関数operator+関数の定義をしてみま~す💡 」


その定義はこちらになります(^_-)-☆

👇


Point operator+(int b,Point p){


Point a;


a.x=b+p.x;

a.y=b+p.y;


return a;

}


ソーラー「👆このように自作関数operator+関数の定義が設定されていると


main関数内で


5+p1;


が実行されたとき


operator+(5,p1);


が実行されることになります


そのとき


自作関数operator+関数の定義

👇

Point operator+(int b,Point p){


Point a;


a.x=b+p.x;

a.y=b+p.y;


return a;

}

👆


の定義内容の


int b

数値データ5



Point p

オブジェクトp1



代入された


Point a;


a.x=5+p1.x

a.y=5+p1.y


return a;



実行されることになります


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


a.x

a.y


には


5+p1.x

5+p1.y


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


もし


クラスPoint型のオブジェクトp1のメンバ変数


p1.x

p1.y

1

1

代入されていたなら


a.x

a.y


には


6

6


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


そして


return a;


により


クラスPoint型のオブジェクトaが


戻り値として


operator+(5,p1)


に返されることになります


自作関数operator+関数の戻り値を格納する型は


クラスの型Pointに設定されているので


operator+(5,p1)に


戻り値として


クラスPoint型のオブジェクトaが


格納できるというわけです。


このとき


クラスPoint型のオブジェクトoperator+(5,p1)のメンバ変数


operator+(5,p1).x

operator+(5,p1).y


に相当するものに


オブジェクトaのメンバ変数


a.x

a.y



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


a.x

a.y


には


6

6


代入されているので


operator+(5,p1).x

operator+(5,p1).y


に相当するものに


6

6


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


次に


p2のクラスPoint型のオブジェクト宣言


Point p2;


を実行し


p2=operator+(5,p1);


を実行すると


クラスPoint型のオブジェクトp2のメンバ変数


p2.x

p2.y


には


6

6


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


あとは


クラスPoint型のオブジェクトp2のメンバ関数


p2.pointdisplay();


実行すれば


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


6

6


を表示することができます。」


その時のプログラムはこちらです

👇


#include <iostream>


using namespace std;


class Point{


public:

int x;

int y;


public:


void pointdisplay();


};


void Point::pointdisplay() {


cout << x << "\n";

cout << y << "\n";

}



Point operator+(int b,Point p){


Point a;


a.x=b+p.x;

a.y=b+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=5+p1;

//🌞p3=operator+(5,p1)と記述してもOKです🌞


p3.pointdisplay();


return 0;

}


プログラムの実行結果


1

1

2

2

6

6


マックス「


自作関数operator+を用いて


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


を行い


p1+p2;


に続いて


p1+5;


さらに


5+p1;


も順調に実行できたな


にゃはっははは」









































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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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