フレンド関数はクラスのメンバ関数でない普通の自作関数です クラスのメンバ変数のアクセス指定子がprivateの場合 main関数内でクラス型のオブジェクトのメンバ変数を直接
お友達の登場です 麩連弩(フレンド)関数さんいらっしゃ~い
ソーラー「ビック ニュース!!
ねえ、みんな🌞
クラスPoint型の
オブジェクトp1
と
オブジェクトp2
同士の足し算
p1+p2;
が記述されたとき
クラスPoint型のオブジェクトp1のメンバ変数
p1.x
p1.y
と
クラスPoint型のオブジェクトp2のメンバ変数
p2.x
p2.y
同士の足し算
p1.x+p2.x
p1.y+p2.y
が実行されるよう
自作関数operator+関数を定義することができたね💡
その時の定義はこちらです。
👇
Point operator+(Point p,Point q){
Point a;
a.x=p.x+q.x;
a.y=p.y+q.y;
return a;
}
マックス「意外と普通な感じに
自作関数operator+関数の定義を
設定することができたな
p1+p2;
が
実行されると
operator+(p1,p2);
が実行されるんだろう」
てんC「
p1+p2;
が
実行されると
operator+(p1,p2);
が実行されるのですが
+演算子が用いられた
p1+p2;
が記述してあっても
必ず
クラスPoint型のオブジェクトp1のメンバ変数
p1.x
p1.y
クラスPoint型のオブジェクトp2のメンバ変数
p2.x
p2.y
同士の足し算
p1.x+p2.x;
p1.y+p2.y;
が実行されるのではなく
p1+p2;
が記述されたとき
どのような命令文が実行されるかは
自作関数operator+関数の定義次第ということになりますね。」
ソーラー「そうなんだ。
そして
自作関数operator+の定義として
👇
Point operator+(Point p,Point q){
Point a;
a.x=p.x+q.x;
a.y=p.y+q.y;
return a;
}
が用いられたプログラムは
次のようだったね。」
👇
#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+(Point p, Point q) {
Point a;
a.x = p.x + q.x;
a.y = p.y + q.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=operator+(p1,p2);と記述してもOKです🌞
p3.pointdisplay();
return 0;
}
プログラムの実行結果
1
1
2
2
3
3
ソーラー「
p1+p2;
つまり
operator+(p1,p2);
が実行されているけど
なんと
p1+p2;
つまり
operator+(p1,p2);が
実行されない場合があるんだよ
それは
クラスのメンバ変数のアクセス指定子が関係しているんだけど・・・
なぜだか わかるかな」
マックス「うん わからん」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます