====================================================================== C++おぼえがき ====================================================================== ---------------------------------------------------------------------- 変数の型 ---------------------------------------------------------------------- ブール値 bool 1B (0=true, 1=false) 整数 int 2〜4B (32bit環境では4B) short int 2B long int 4B 浮動小数点数 float 4B double 8B long double 10B 文字 char 1B 文字列 string 不定 (要string.h) 空 void 0B ---------------------------------------------------------------------- 標準出力ストリーム ---------------------------------------------------------------------- iostream.h(アイオーストリーム, input output steram) は標準入出力の機能をもったヘッダ。 cout 標準出力ストリーム cin 標準入力ストリーム cerr 標準エラーストリーム clogd バッファつき標準エラーストリーム 標準出力(ディスプレイへの出力)には cout をつかう。 cout << "Hello!!" << "Worl" << "d!!" << endl; << によって、データを送ることができる。 文字列はダブルクォーテーションでくくる。 改行は endl(end line) または文字列のなかに \n を入れる。 ---------------------------------------------------------------------- エスケープシーケンス ---------------------------------------------------------------------- \a ベルを鳴らす \b 後退 \f フォームフィールド(ページ送り、スクリーンクリア) \n 改行 \r 復帰 \t 水平タブ \v 垂直タブ \\ \ \' アポストロフィ \" ダブルクォーテーション \? 疑問符 \ooo ooo = 3 文字までの 8 進数字列 \xhhh hhh = 16 進数字列 \Xhhh hhh = 16 進数字列 ---------------------------------------------------------------------- ヒューマンインタフェース ---------------------------------------------------------------------- 入力ストリーム cin : キーボードからの入力 cin >> i; で入力待ち。入力は変数 i に代入される。複数の変数に入力するには cin >> i >> j >> k >> ・・・; とする。キーボードからの入力が多すぎたら次の cin の入力へまわされる。 入力の区切りは 空白、タブ、改行。 I am ksp のようにスペースの入った文字列を 1つの char 型配列に代入するには cin.getline(文字列, 最大文字数) という構文を用いる。 int main(void){ char str[100]; cout << "Please input the string >>"; cin.getline(str,100); cout << str; } など。 ---------------------------------------------------------------------- オブジェクト指向プログラミングとは ---------------------------------------------------------------------- クラスを用いたプログラミング。大雑把に 1.カプセル化 データを安全に保護(異常なデータ入力を入口で排除)、まとめて扱う 2.ポリモーフィズム 多様の形態。一つの名前でたくさんの機能を実現 3.継承 すでにあるクラスを拡張、再利用できる という特徴を持つ。オブジェクト指向プログラミングは プログラマの負担を抑えるために開発された手法。 ---------------------------------------------------------------------- クラス ---------------------------------------------------------------------- 構造体に関数が入ったもの。設計図。 クラスの定義はつぎのようにする。 class 新しい型名{ プロパティ宣言; ... ... public: メソッド宣言; ... ... }; 上のように記述すると、プロパティはカプセル化 = private され、 メソッドは公開 = public される。 ---------------------------------------------------------------------- メソッド ---------------------------------------------------------------------- メンバ関数。クラスに属する関数(構造体のなかの関数)。 C言語の構造体は変数をまとめるだけだったが、 C++では構造体変数自身がメソッドによりそのプロパティを操作できる。 メソッドを定義すればプロパティの入出力や処理が簡単になる。 ---------------------------------------------------------------------- プロパティ ---------------------------------------------------------------------- クラスのなかの変数。 ---------------------------------------------------------------------- インスタンス ---------------------------------------------------------------------- クラスを実体化したもの。 クラス名 インスタンス名; と宣言する。複数同時に宣言できす。 ex) myclass myinstance1; ex) myclass myins1, myins2; ---------------------------------------------------------------------- プロパティとメソッドの参照法 ---------------------------------------------------------------------- つぎのようにして参照する。 インスタンス名.プロパティ名; インスタンス名.メソッド名(引数,...); プロパティの参照方法は構造体と同じ。 メソッドの引数は関数呼び出しと同じ。 非公開(private)のプロパティ、メソッドは参照できない。 ex) myinstance.i; ex) myinstance.f(x); ---------------------------------------------------------------------- アクセス制限 ---------------------------------------------------------------------- クラスはメンバの保護機能を持っている = カプセル化 カプセル化のため、つぎのアクセス制限が設けられている。 private 非公開 protected 一部公開 public 公開 これらを アクセス指定子 という。 クラス内と外部のデータは全て publicな メソッドでやりとりされる。 実際にはつぎのように宣言する。 class myclass{ プロパティ1; プロパティ2; public: メソッド1; メソッド2; private: プロパティ3; }; ここで、プロパティ1〜3 は private 、 メソッド1〜2 は public 。 アクセス制限のレベルは なにも指定しなければ private 指定したいときはアクセス指定子に : をつける ことで指定できる。 ---------------------------------------------------------------------- アクセス制限の基準 ---------------------------------------------------------------------- プロパティ(メンバ変数) --> private メソッド(メンバ関数) --> public というのが基本的。できるだけ private にしておくと安全。 ---------------------------------------------------------------------- スコープ解決演算子 ---------------------------------------------------------------------- :: という演算子。 ---------------------------------------------------------------------- 数学関数一覧 (要 math.h) ---------------------------------------------------------------------- 関数プロトタイプ 内容 解説 double pow(double x, double y) x^y べき乗 double fabs(doule x) |x| 絶対値 double sqrt(double x) sqrt(x) 平方根 double cbrt(double x) sqrt[3](x) 立方根 double hypot(double x, double y) sqrt(x^2 + y^2) double sin(double x) sin(x) 三角関数 double cos(double x) cos(x) 〃 double tan(double x) tan(x) 〃 double asin(double x) Arcsin(x) 逆三角関数 double acos(double x) Arccos(x) 〃 double atan(double x) Arctan(x) 〃 double atan2(double y, double x) Arctan(y/x) double sinh(double x) sinh(x) 双曲線関数 double cosh(double x) cosh(x) 〃 double tanh(double x) tanh(x) 〃 double asihh(double x) Arcsinh(x) 逆双曲線関数 double acosh(double x) Arccosh(x) 〃 double atanh(double x) Arctanh(x) 〃 double exp(double x) exp(x) 指数関数 double expm1(double x) exp(x)-1 double log(double x) log_e(x) double log10(x) log_10(x) double log1p(x) log_e(1+x) double rint(double x) x を四捨五入した整数 double floor(double x) n <= x < n+1 の整数 double ceil(double x) n-1 < x <= n の整数 ---------------------------------------------------------------------- 数学定数一覧 (要 math.h) ---------------------------------------------------------------------- M_E e M_LOG2E log_2(e) M_LOG10E log_10(e) M_LN2 log_e(2) M_LN10 log_e(10) M_PI π M_PI_2 π/2 M_PI_4 π/4 M_1_PI 1/π M_2_PI 2/π M_2_SQRTPI 2/sqrt(π) M_SQRT2 sqrt(2) M_SQRT1_2 1/sqrt(2)