🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
普通の自作関数operator+を定義して+演算子のオーバーロードを行い5+p1;を実行してみます 何が実行されるかは自作関数operator+の定義次第ですね
普通の自作関数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;
も順調に実行できたな
にゃはっははは」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます