🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
代入演算子=と違い比較演算子>のオーバーロードは普通の自作関数operator>を用いても実行することができます
代入演算子=と違い比較演算子>のオーバーロードは普通の自作関数operator>を用いても実行することができます
ソーラー「比較演算子>のオーバーロードは
クラスのメンバ関数としてoperator>関数を設定する方法以外に
普通の自作関数operator>を設定する方法でも実行することができます
例えば次のように
クラスSuutitoMojiと
クラスSuutitoMojiのメンバ関数でない普通の自作関数であるoperator>関数の定義を
次のように設定してみたいと思います
👇
class SuutitoMoji{
public:
int x;
public:
char* i;
};
int operator>(SuutitoMoji& c, SuutitoMoji& d) {
if (c.x > d.x) {
return 1;
}
else {
return 0;
}
}
//👆クラスSuutitoMojiのメンバ関数でない普通の自作関数であるoperator>関数の定義です😊
マックス「このときの
operator>関数は
クラスSuutitoMojiのメンバ関数でない普通の自作関数なので
operator>関数のクラスSuutitoMojiのメンバ関数宣言
は
クラスSuutitoMojiのクラス宣言内に記述されていないというわけだな😊」
ソーラー「そうなんです
クラスSuutitoMojiと
クラスSuutitoMojiのメンバ関数でない
普通の自作関数operator>関数の定義を
用いて
比較演算子>のオーバーロードを実行してみたいと思います
そのプログラムはこちらとなります
👇
#include <iostream>
using namespace std;
class SuutitoMoji{
public:
int x;
public:
char* i;
};
int operator>(SuutitoMoji& c, SuutitoMoji& d) {
if (c.x > d.x) {
return 1;
}
else {
return 0;
}
}
int main() {
SuutitoMoji a;
a.x = 5;
SuutitoMoji b;
b.x = 2;
cout << (a > b) << "\n";
return 0;
}
ビルド実行結果
1
ソーラー「このプログラムでは
aのクラスSuutitoMoji型のオブジェクト宣言
SuutitoMoji a;
により
クラスSuutitoMoji型のオブジェクトaが作製され
a.x = 5;
が実行されることにより
クラスSuutitoMoji型のオブジェクトaのメンバ変数
a.xに5が代入されています
次に
bのクラスSuutitoMoji型のオブジェクト宣言
SuutitoMoji b;
により
クラスSuutitoMoji型のオブジェクトbが作製され
b.x = 2;
が実行されることにより
クラスSuutitoMoji型のオブジェクトbのメンバ変数
b.xに2が代入されています
そして
cout << (a > b) << "\n";
の実行ですね
まずは
クラスSuutitoMoji型のオブジェクトaとクラスSuutitoMoji型のオブジェクトbに比較演算子>を用いた
a > b
が実行されると何が起きるかということですね
a > b
が実行されるとき
自作関数
operator>(a,b);
が実行されます」
ぶーにゃん「にゃお~ん」
ソーラー「ふふ
operator>(a,b);
が実行されると
自作関数operator>関数の定義
👇
int operator>(SuutitoMoji& c, SuutitoMoji& d) {
if (c.x > d.x) {
return 1;
}
else {
return 0;
}
}
の引数となっている
参照変数宣言
SuutitoMoji& c
に
クラスSuutitoMoji型のオブジェクトaが
SuutitoMoji& d
に
クラスSuutitoMoji型のオブジェクトbが代入された
if (a.x > b.x) {
return 1;
}
else {
return 0;
}
が実行されることになります
クラスSuutitoMoji型のオブジェクトaのメンバ変数a.xには数値データ5
クラスSuutitoMoji型のオブジェクトbのメンバ変数b.xには数値データ2
が代入されているので
if (5 > 2) {
return 1;
}
else {
return 0;
}
が実行されることになります」
ぶーにゃん「にゃ~~ん」
ソーラー「よし、よ~し、そうなんだよ😊」
ソーラー「そして
数値データ5と数値データ2に
比較演算子>を用いた
5 > 2は1で表されることになるので
if (1) {
return 1;
}
else {
return 0;
}
が実行されることになります
if (){}
else{}
の
()の中が1の場合は
()につづくブロック{}内の命令文が実行されることになります
if (){}
else{}の
()の中が0の場合は
else{}内のブロック{}内の命令文が実行されることになります
ですので
return 1;
が実行されることになり
operator>(a,b)
つまり
a>b
には
戻り値として
1
が返されることになります
ですので
cout << (a > b) << "\n";
の実行結果は
1
となります」
マックス「おお
クラスSuutitoMoji型のオブジェクトa
と
クラスSuutitoMoji型のオブジェクトb
に比較演算子>
を用いたプログラムが実行できているじゃないか
比較演算子>のオーバーロードが
普通の自作関数operator>関数を設定して実行できてる!」
ソーラー「代入演算子=のオーバーロードを実行するときは
普通の自作関数operator=を設定する方法は使えず
クラスのメンバ関数としてoperator=関数を設定する方法しか使用できませんでした
が
比較演算子>のオーバーロードを実行するときは
普通の自作関数operator>を設定する方法も
クラスのメンバ関数としてoperator>関数を設定する方法も
使用できるんですね」
てんC「+演算子、++演算子のオーバーロードを実行するときも
普通の自作関数operator+
普通の自作関数operator++
を設定する方法と
クラスのメンバ関数としてoperator+関数
クラスのメンバ関数としてoperator++関数
を設定する方法も
使用できました
代入演算子=のオーバーロードの場合だけが普通の自作関数operator=を設定する方法しか使えないのですね
特殊な感じがしますね」
マックス「やっぱりぃ、てんC 俺もそう思う」
#include <iostream>
using namespace std;
class SuutitoMojidisplay {
public:
int x;
public:
char* i;
};
int operator>(SuutitoMojidisplay& c, SuutitoMojidisplay& d) {
if (c.x > d.x) {
return 1;
}
else {
return 0;
}
}
int main() {
SuutitoMojidisplay a;
a.x = 5;
SuutitoMojidisplay b;
b.x = 2;
cout << (a > b) << "\n";
return 0;
}
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます