そもそも+演算子のオーバーロードに登場してくる😊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;
}
👆
が
なぜ
このような形式で記述されているのかというところ
から
は・じ・め・てみようよ!
」
🌞 🌞 🌞 🌞 🌞 🌞 🌞
ソーラー「面白くなってきたね るんるん(#^^#) 」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます