第一章 C++の概要
第一章で従来のC++と標準C++の違いが書いてあった。昔Hello, world!が動かなかったのって、古いコンパイラで標準C++の描き方していたんじゃないかという疑いが出てきた。あるいはcstdio.hを呼び出しつつcoutで出力しようとしていたとか。
メモ
標準ライブラリの名前空間
using namespace std
標準入出力
cout << expression << expression ... cin >> expression >> expression ...
<<や>>でいくらでもつなげられる。でも << も >>もめんどい。 末尾に自動で改行を入れてくれる関数が欲しい……。
int a,b;
cin >> a >> b;
は入力が
10 15
でも
10 15
でもa = 10,b = 15になる。あと入力は行バッファが使われているので、標準入力から一文字ずつ読み込むプログラムでも、[Enter]が入力されてはじめて処理される。
クラス
class class-name{ //非公開関数、変数 public: //公開関数、変数 } type class-name::func-name(param-list){ //関数の本体 }
関数の本体をクラスの宣言と別に書くのが変な感じがする。でも第二章よむと、宣言と一緒に本体を書くと自動インライン関数になるらしい。::はスコープ解決子だって。
練習問題1.5.3の循環キューを作ってみた。
#include <iostream> #define SIZE 10 using namespace std; class cyclic_que{ int que[SIZE]; int head; int tail; int length; public: cyclic_que(); void push(int i); int pop(); }; cyclic_que::cyclic_que(){ length = 0; head = 0; tail = 0; } void cyclic_que::push(int i){ if (length == SIZE) { cout << "キューが一杯です\n"; return ; } que[head] = i; if (head == SIZE - 1){ head = 0; } else { head++; } length++; return; } int cyclic_que::pop() { int r; if (length == 0) { cout << "キューは空です\n"; return 0; } r = que[tail]; if (tail == SIZE - 1){ tail = 0; } else { tail++; } length--; return r; }
SIZEが定数で宣言されているのが、いかにも気持ち悪いです。あと適切な変数名を付けるのがやっぱり苦手。
Cとの違い
- プロトタイプ宣言が必須
- 関数の仮引数にvoidを入れる必要がない
- 戻り値の方を宣言している場合は、絶対返さないとダメ。
Intを返す関数だけど、場合によっては返せるIntが無い場合はどうするんだろう。空のStackをpopした場合とか。