記事一覧(Cの文法(1)~(17),他) まず覚えるCの文法(progC.pdf) P3.h: 複素数のクラス //------------------------------------- #include <stdio.h> class complex{ private: double re, im; public: complex(double x){re=x; im=0;} complex(double, double); void show(void); void load(complex); complex add(complex); complex mult(complex); void operator=(complex); complex operator+(complex); complex operator*(complex); }; complex::complex(double x, double y){ re=x; im=y; } void complex::show(void){ printf("re=%f, im=%f\n", re, im); } void complex::load(complex z){ re=z.re; im=z.im; } complex complex::add(complex z){ return complex(re+z.re, im+z.im); } complex complex::mult(complex z){ return complex(re*z.re-im*z.im, re*z.im+im*z.re); } void complex::operator=(complex z){ load(z); } complex complex::operator+(complex z){ return add(z); } complex complex::operator*(complex z){ return mult(z); } //------------------------------------- |
================================================= 3. 多重定義 C++ では引数の数や型が異なれば異なる関数に同じ名 前を使う(多重に定義する)ことができます[3-1].さ らに 予約語の operator を使って,演算子の記号も多 重定義できるのです[3-2].P3.h では コンストラクタ complex() を多重定義し,演算子「=」「+」「*」の意 味も複素数の演算用に定義しなおしています. ・文法の理解が目的なので,減算・除算は省略します. ・加算,乗算は処理中の複素数と引数の複素数の演算で す.一般に処理中のオブジェクトはポインタ this で 参照でき,「re+z.re」は「this->re+z.re」を意味し ています. ・C++ では struct もクラスのように使えます[3-3]. P3.cpp: 使用例 //------------------------------------- #include "P3.h" int main(void){ complex z1(1, 2), z2(3, -4), z(0); z.load(z1.add(z2)); z.show(); z.load(z1.mult(z2)); z.show(); z=z1+z2; z.show(); z=z1*z2; z.show(); return 0; } //------------------------------------- P3.cpp の「z.load(z1.add(z2));」は「z=z1+z2;」と 同じです.後者の方がずいぶん見やすいですね. ・演算子の優先順位は本来のものと同じです.このこ とを「z=z1*z1+z2*z2;」で確かめてください. z.re==-10 //(1-4)+(9-16) z.im==-20 //(2+2)+(-12-12) になっているはずです.[3-1] オーバーロードとオーバーライド [3-2] オペレータ(演算子)のオーバーロード [3-3] C++構造体 |