Microsoft PowerPoint - class2-OperatorOverLoad.pptx

Similar documents
Microsoft PowerPoint - 12.ppt [互換モード]

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft PowerPoint - 13.ppt [互換モード]

基礎プログラミング2015

情報処理Ⅰ演習

Microsoft PowerPoint - prog08.ppt

Microsoft PowerPoint - prog03.ppt

JavaプログラミングⅠ

JavaプログラミングⅠ

Microsoft PowerPoint - 12.ppt [互換モード]

Java講座

基礎プログラミング2015

プログラミング入門1

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

JavaプログラミングⅠ

gengo1-11

02: 変数と標準入出力

Microsoft PowerPoint - prog04.ppt

02: 変数と標準入出力

演習課題No12

基礎プログラミング2015

Microsoft PowerPoint - 09.pptx

6 関数 6-1 関数とは少し長いプログラムを作るようになると 同じ処理を何度も行う場面が出てくる そのたびに処 理を書いていたのでは明らかに無駄であるし プログラム全体の見通しも悪くなる そこで登場す るのが 関数 である 関数を使うことを 関数を呼び出す ともいう どのように使うのか 実際に見て

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

プログラミング実習I

プログラミング基礎I(再)

JavaプログラミングⅠ

Prog1_6th

プログラミング入門1

JavaプログラミングⅠ

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

Microsoft PowerPoint - lec10.ppt

メソッドのまとめ

Microsoft PowerPoint - CproNt02.ppt [互換モード]

プログラミング実習I

PowerPoint プレゼンテーション

JavaプログラミングⅠ

Microsoft PowerPoint ppt

PowerPoint プレゼンテーション

JavaプログラミングⅠ

Microsoft PowerPoint - prog07.ppt

Microsoft Word - no11.docx

Microsoft PowerPoint ppt

gengo1-10

新版 明解C++入門編

プログラミング入門1

memo

Javaプログラムの実行手順

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

デジタル表現論・第4回

Microsoft PowerPoint - handout07.ppt [互換モード]

Microsoft Word - Cプログラミング演習(12)

PowerPoint Presentation

Microsoft Word - 3new.doc

Microsoft Word - no02.doc

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Taro-ポインタ変数Ⅰ(公開版).j

memo

02: 変数と標準入出力

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

PowerPoint Presentation

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft Word - VBA基礎(6).docx

kiso2-09.key

02: 変数と標準入出力

02: 変数と標準入出力

Prog1_10th

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Slide 1

講習No.12

memo

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

3.1 stdio.h iostream List.2 using namespace std C printf ( ) %d %f %s %d C++ cout cout List.2 Hello World! cout << float a = 1.2f; int b = 3; cout <<

Microsoft PowerPoint - lec06 [互換モード]

解きながら学ぶC++入門編

PowerPoint プレゼンテーション

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

02: 変数と標準入出力

PowerPoint プレゼンテーション

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

PowerPoint プレゼンテーション

オブジェクト指向プログラミング・同演習 5月21日演習課題

C 言語第 7 回 掛け算 (multiply number) ìz1 = x1 + iy1 í îz = x + iy 割り算 (devide number) ( )( ) ( ) Þ z z = x + iy x + iy = x x - y y + i y x + x y

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

JAVA入門

Microsoft PowerPoint - chap10_OOP.ppt

CプログラミングI

ソフトゼミC 第二回 C++の基礎

Microsoft PowerPoint - prog06.ppt

プログラミング基礎

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

とても使いやすい Boost の serialization

Microsoft PowerPoint - 11.ppt [互換モード]

Microsoft Word - CompA-Ex doc

Microsoft PowerPoint pptx

PowerPoint プレゼンテーション

デジタル表現論・第6回

Transcription:

クラス Class (3) メンバ関数と演算子のオーバロード 上級プログラミング講義資料 成蹊大学理工学部情報科学科 1 多重定義 ( オーバロード ) 関数のオーバロード C++ の関数では シグニチャ ( 関数名, 引数の型および個数のこと ) が異なることによって 同名の関数が複数存在することが出来る 演算子のオーバロード四則演算子をはじめとする演算子を 新たに定義したクラスを取り扱うように多重定義することが出来る 2

演算子のオーバロード使用以前 例 : 複素数クラス Complex を定義できたとすると その使い方は int main() { Complex x,y,z; x.input(); // 複素数 xの入力 y.input(); // 複素数 yの入力 z= x.add(y); // xにyを加えた複素数をzに代入 z.print(); // zを表示 cout << endl; 加算のわりには不自然な記法 z = x+y; と書けないか? 3 クラス Complex の定義の例 class Complex { double real, imaginary; // 実数部 real と虚数部 imaginary public: Complex(double a=0, double b=0){ real=a; imaginary=b; void input(){ cout << " 実数部と虚数部を入力せよ -->"; cin >> real >> imaginary; void print(){ cout << real; ; if(imaginary>0) cout << "+"; cout << imaginary << i ; // a+biまたはa-biの形式で表示 Complex add(complex k){ return Complex(real+k.real, imaginary+k.imaginary); 4

演算子のオーバロード 演算子は関数の特殊ケース 例 : + 演算子 operator+ という名の関数 二項演算子における2つの解釈 obj1 + obj2 obj1: 第 1 オペランド obj2: 第 2 オペランド 解釈 1 operator+ を obj1 のクラスのメンバ関数と解釈 obj1.operator+(obj2) と等価 解釈 2 両オペランドとも operator+ の引数と解釈 operator+(obj1, obj2) と等価 この場合 operator+ はメンバ関数とはならない 5 演算子のオーバロード使用後 class Complex { double real, imaginary; // 実数部 real と虚数部 imaginary public: Complex(double a=0, double b=0){ real=a; imaginary=b; void input(){ cout << " 実数部と虚数部を入力せよ -->"; cin >> real >> imaginary; void print(){ cout << real; ; if(imaginary>0) cout << "+"; cout << imaginary << i ; // a+biまたはa-biの形式で表示 Complex operator+(complex k){ return Complex(real+k.real, imaginary+k.imaginary); 6

演算子のオーバロード使用以後 例 : 複素数クラス Complex を定義できたとすると その使い方は int main() { Complex x,y,z; x.input(); // 複素数 xの入力 y.input(); // 複素数 yの入力 z= x+y; // xにyを加えた複素数をzに代入 z.print(); // z を表示 cout << endl; z = x.operator+(y); と書いても良いが そんな書き方をする人はいない 7 演算子をオーバロードする場合の注意 オーバロード可能な演算子 (,),[,],->,*,&,++,--,-,~,!,/,%,+,<<,>>, <,>,<=,>=,==,!=,^,,&&,,=,+=,*=,/=,-=,%= など オーバロード不可能な演算子. ::.*?: sizeof 代入演算子 = について = は 同じクラスのオブジェクト同士であれば代入できるようにオーバロードされている演算子なので 代入 目的以外で使わない限り ユーザがオーバロードする必要はない 優先順位オーバロードされた演算子でも その演算子の元の優先順位や結合規則 ( 左結合性 右結合性 結合性なし ) は変えることがで きない 8

演算子の関数形の例 配列演算子 [] の例 rtype operator[](dtype darg); rtype: リターン型 dtype: 仮引数の型 インクリメント演算子 デクリメント演算子前置の ++ の場合 rtype operator++(); // そのクラスのメンバ関数の場合 rtype operator++(aclass&); //Aclass のメンバ関数でない場合の例 後置の ++ の場合 rtype operator++(int); // そのクラスのメンバ関数の場合 rtype operator++(aclass&,int); //Aclass のメンバ関数でない場合の例 9 他の演算子のオーバロードは? 複素数クラス int main() { Complex x,y,z; x.input(); y.input(); z= x.add(y); z.print(); cout << endl; 演算子を用いた 自然な記述 int main() { Complex x,y,z; cin >> x >> y; z= x+y; cout << z << endl; x+y 以外も上記のようにできるのだろうか? 10

入力演算子 >> 演算子の関数表現 cin >> x >> y; operator>>(cin, x) この関数のプロトタイプはどうなるか? istream& operator>>( istream&, Complex& ); cinを受け取り cinを返す cin( 標準入力 ) は実行環境に1つなので 参照変数で受け渡す 複素数クラスComplexのメンバ関数ではない! 11 出力演算子 << 演算子の関数表現 (2) cout << z << endl; operator<<(cout, z) この関数のプロトタイプはどうなるか? ostream& operator<<( ostream&, Complex ); coutを受け取り coutを返す cout( 標準出力 ) は実行環境に1つなので 参照変数で受け渡す 複素数クラスComplexのメンバ関数ではない! 12

cin, cout の参照渡しについて main ostream クラスのオブジェクト cout<<y; cin>>x; istream クラスのオブジェクト 13 cin, cout の参照渡しについて main 関数 operator>> cout<<y; cin>>x; operator>>(istream inst,? cin のコピーを受け取っても意味はない 14

cin, cout の参照渡しについて main 関数 operator>> inst cout<<y; cin>>x; istream& operator>>(istream &inst, ){ ; return inst; operator>> 関数は cin 自体を inst という名前で使用する そして最後に使用した inst つまり cin を返す 15