+演算子には💖クラスPoint型の💖オブジェクトp1とオブジェクトp2をp1+p2;のように足し合わせる機能はありません。

『演算子のオーバーロード』のつづき・・・


🌞   🌞   🌞   🌞   🌞   🌞   🌞 


クラスPoint型の 



オブジェクトp2にオブジェクトp1を代入する


p2=p1;


が実行されることにより


クラスPoint型のオブジェクトのメンバ変数


p2.x

p2.y


p1.x

p1.y


が代入される


p2.x=p1.x;

p2.y=p1.y;


が実行されました。


(ここがポイントですね)

👇

クラスPoint型の


オブジェクトp2にオブジェクトp1を代入すると


クラスPoint型のオブジェクトp2のメンバ変数

p2.x

p2.y



クラスPoint型のオブジェクトp1のメンバ変数

p1.x

p1.y


が代入されることがわかりました。



🌞   🌞   🌞   🌞   🌞   🌞   🌞  


マックス「


クラスPoint型の 


オブジェクトp2に


クラスPoint型の


オブジェクトp1を代入する


p2=p1; 


を実行するだけで


直接


クラスPoint型のオブジェクトp2のメンバ変数


p2.x

p2.y


クラスPoint型のオブジェクトp1のメンバ変数


p1.x

p1.y


を代入する


p2.x=p1.x;

p2.y=p1.y;


を実行しなくても


p2.x=p1.x;

p2.y=p1.y;



実行できるのは


便利なんじゃないか」


int(イント)「さりげなく


C++言語の作者は


オブジェクトにオブジェクトを代入することで


オブジェクトのメンバ変数にオブジェクトのメンバ変数が


代入できるよう設定したんだね。」


 


🌞   🌞   🌞   🌞   🌞   🌞   🌞  


ここで思うんです。


クラスPoint型の 


オブジェクトp2に


クラスPoint型の 


オブジェクトp1を代入する


p2=p1; 


を実行できるなら


クラスPoint型のオブジェクトp1



クラスPoint型のオブジェクトp2を足し合わせる


     

          p1+p2; 





実行できるんじゃないかって


そう、思うんじゃないかな😊


それが実行出来たら


p1.x

p2.x


p1.y

p2.y



が足し合わされる


p1.x+p2.x;

p1.y+p2.y;


実行されることになりそうだよね。


🌞   🌞   🌞   🌞   🌞   🌞   🌞




マックス「 なぁ~んだ😊 


 

          p1+p2;  


が実行できるかどうかか?



           p2=p1;  



が実行できるなら


           p1+p2; 



も実行できるんじゃないか?」


ソーラー「そうですね。


できなくはなさそうですね。」


てんC「それでは


クラスPoint型の 


オブジェクトp1



クラスPoint型の 


オブジェクトp2を足し合わせる


     

          p1+p2; 



を実行してみたいと思います。

                           」



#include <iostream>


using namespace std;



class Point{


public:

int x;

int y;


public:


void pointdisplay();

};


void Point::pointdisplay() {


cout << x << "\n";

cout << y << "\n";

}




int main() {



Point p1;


p1.x = 1;

p1.y = 1;

p1.pointdisplay();



Point p2;


p2.x = 2;

p2.y = 2;

p2.pointdisplay();


p1+p2;//🌞👈ここです


return 0;

}



ビルド実行結果



エラー C2676 二項演算子 '+': 'Point' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照)

エラー (アクティブ) E0349 これらのオペランドと一致する演算子 "+" はありません

エラー C2784 'std::_String_iterator<_Mystr> std::operator +(_String_iterator<_Mystr>::difference_type,std::_String_iterator<_Mystr>)': テンプレート 引数を 'std::_String_iterator<_Mystr>' に対して 'Point' から減少できませんでした

エラー C2784 'std::_String_const_iterator<_Mystr> std::operator +(_String_const_iterator<_Mystr>::difference_type,std::_String_const_iterator<_Mystr>)': テンプレート 引数を 'std::_String_const_iterator<_Mystr>' に対して 'Point' から減少できませんでした

エラー C2784 'std::_Array_iterator<_Ty,_Size> std::operator +(ptrdiff_t,std::_Array_iterator<_Ty,_Size>)': テンプレート 引数を 'std::_Array_iterator<_Ty,_Size>' に対して 'Point' から減少できませんでした

エラー C2784 'std::_Array_const_iterator<_Ty,_Size> std::operator +(ptrdiff_t,std::_Array_const_iterator<_Ty,_Size>)': テンプレート 引数を 'std::_Array_const_iterator<_Ty,_Size>' に対して 'Point' から減少できませんでした

エラー C2784 'std::reverse_iterator<_RanIt> std::operator +(reverse_iterator<_RanIt>::difference_type,const std::reverse_iterator<_RanIt> &)': テンプレート 引数を 'const std::reverse_iterator<_RanIt> &' に対して 'Point' から減少できませんでした

エラー C2784 'std::move_iterator<_RanIt> std::operator +(move_iterator<_RanIt>::difference_type,const std::move_iterator<_RanIt> &)': テンプレート 引数を 'const std::move_iterator<_RanIt> &' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,std::basic_string<_Elem,_Traits,_Alloc> &&)': テンプレート 引数を 'std::basic_string<_Elem,_Traits,_Alloc> &&' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,const _Elem)': テンプレート 引数を 'std::basic_string<_Elem,_Traits,_Alloc> &&' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,const _Elem *const )': テンプレート 引数を 'std::basic_string<_Elem,_Traits,_Alloc> &&' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,const std::basic_string<_Elem,_Traits,_Alloc> &)': テンプレート 引数を 'std::basic_string<_Elem,_Traits,_Alloc> &&' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem,std::basic_string<_Elem,_Traits,_Alloc> &&)': テンプレート 引数を 'std::basic_string<_Elem,_Traits,_Alloc> &&' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem,const std::basic_string<_Elem,_Traits,_Alloc> &)': テンプレート 引数を 'const std::basic_string<_Elem,_Traits,_Alloc> &' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem *const ,std::basic_string<_Elem,_Traits,_Alloc> &&)': テンプレート 引数を 'const _Elem *const ' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem *const ,const std::basic_string<_Elem,_Traits,_Alloc> &)': テンプレート 引数を 'const _Elem *const ' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,std::basic_string<_Elem,_Traits,_Alloc> &&)': テンプレート 引数を 'const std::basic_string<_Elem,_Traits,_Alloc> &' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)': テンプレート 引数を 'const std::basic_string<_Elem,_Traits,_Alloc> &' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *const )': テンプレート 引数を 'const std::basic_string<_Elem,_Traits,_Alloc> &' に対して 'Point' から減少できませんでした

エラー C2784 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,const std::basic_string<_Elem,_Traits,_Alloc> &)': テンプレート 引数を 'const std::basic_string<_Elem,_Traits,_Alloc> &' に対して 'Point' から減少できませんでした


int(イント)「ビルドエラーがでてる。


クラスPoint型の 


オブジェクトp1



クラスPoint型の


オブジェクトp2を足し合わせる


     

          p1+p2; 



を実行することはできないのね。」


マックス「ふ~む」



🌞   🌞   🌞   🌞   🌞   🌞   🌞


そうなんです


+演算子には


1+1;


のように


数値データを足し合わせる機能や


a+b;


のように


変数aや変数b


を足し合わせる機能が


あるのですが



          p1+p2; 


のように


         💖クラスPoint型の💖 


💖 オブジェクトp1とオブジェクトp2💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖



を足し合わせる機能

    

はないのです。


新発見だね。


🌞   🌞   🌞   🌞   🌞   🌞   🌞


マックス「そ~いうシステムなのか」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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