フレンド関数はクラスのメンバ関数でない普通の自作関数です クラスのメンバ変数のアクセス指定子が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);が


実行されない場合があるんだよ


それは


クラスのメンバ変数のアクセス指定子が関係しているんだけど・・・


なぜだか わかるかな」


マックス「うん わからん」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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