C++入門

詳説C++【第2版】標準C++完全理解を読んだときに書いたメモの一部

空の引数リスト

C++では,仮引数リストを省略するのは仮引数リストがvoidと書くのと同じ意味を持つ.
ちなみにCでは,任意の数の任意の型の引数を取れることを意味した.

名前空間

グローバルスコープを分割するために,名前付きブロックスコープを提供している.
ソースファイルが別でも,同じ名前空間同士は同一の名前空間として扱われる.

名前空間の識別子の参照
1. 有効範囲解決を使う                       ⇒ 名前空間名::識別子
2. 大域の識別子を参照する                   ⇒ ::大域識別子
3. 名前空間利用宣言をする                   ⇒ using  名前空間名 ::識別子;
4. 特定の名前空間の全識別子を利用可能にする ⇒ using namespace  名前空間名;

4番目のものを乱用すると名前空間を導入した意味が無くなるので注意が必要.

名前なし名前空間
namespace {
  // 宣言や定義の並び
}

名前なし名前空間定義のある翻訳単位内からはそのまま識別子名だけで参照ができる.
しかし,他の翻訳単位からは参照できない.
→ 翻訳単位の外部から識別子を隠すのに利用できる.
C++では,名前が翻訳単位に局所的であることを示すことに,staticを用いるのを推奨していない.
この名前なし名前空間を用いるべき.

継承と仮想関数

継承において,基底となるクラス型を基底クラスという.
基底クラスから派生したクラス型を派生クラスという.
派生クラスのオブジェクトは,基底クラス内で定義されたデータメンバとメンバ関数を全てもっている(継承).

仮想関数

派生クラスを基底クラスの一種とみなすことで柔軟な型チェックシステムを実現すること.
頭にvirtualをつける.