例 | タ イプ | 内容 |
const
int a = 123; const int* p = &a; | 定 数 | グローバル変数の場合は.rodataセクションに作られます。(x86ELF) ロー カル変数の場合はコンパイラへの宣言で.rodataセクションに作られる訳では無いです。 初期値が無いとダメです。 |
void funcA(const int* pN); | ポ インタ仮引数 | その関数内で引数の先を変更できなくなります |
int funcA() const; | メンバー関数 | 関数を呼び出したオブ
ジェクトの内容を変更出来なくなります。(mutable指定された変数を除く) コンパイル時に判別されます。 普 通の関数(メンバーでは無い単体の関数。大域関数とか言ったりします)は指定出来ません。 |
const CA obj; | オブジェクト | コンストラクターを定義しないと、初
期化してないよというエラーが出ます。 constメンバー関数以外は、メンバー変数メンバー関数共にアクセスできません。 |
const
int & b = a; const long & c = a; | & nbsp;参照 | この参照を経由して値を変える事は出来ません。 実装依存ですが、定数値は アドレスを持たない為、無名オブジェクトのコピーが作られ、参照はそれを指す事が多いです。 本体がconstである場合は参照も constにしなければなりません。 参照の初期化時に型制限がゆるくなり、変換可能の型の参照なら定義できるようになります。 |
char*
p2 = const_cast<char*>(p); *p2 += 3; | キャスト | constポインターの場合、constでな
いポインターには代入出来ません。 指す先の値を変えたい場合は、一時的なポインターにキャストし代入して使います。 |
例 | static 付与物 | 効果 |
static int x; | ローカル 変数 | 初期化は一度だけで永続的存在します。 関数限定のスコープを持ったグローバル変数。 (x86ELF の場合)初期値がなければ.localセクション、あれば.dataセクション |
static char a[8]; | グローバル 変数 | 宣言され
たファイル外から使えないようにします。 (宣言されたファイルの範囲を、ファイルスコープや翻訳単位と呼んだりします) (x86ELF の場合)初期値がなければ.localセクション、あれば.dataセクション |
class CA{ static double d; }; double CA::d; | メ ンバー変数 | オブジェクトの数にかかわらず、クラスに1つだけの実体になります。 ク ラス内で宣言したら、グローバルな場所でクラス名とスコープ解決演算子を使って定義をしなければなりません。初期値は定義時に書きます。 (x86ELF の場合)初期値がなければ.bssセクション、あれば.dataセクション |
static void funcA(){} | メ ンバー関数 | クラス内ではstaticメンバーにしかアクセスできなくなります。 グローバ ルな変数や関数にはアクセス出来ます。 thisポインターを持たず、仮想関数にも出来ません。 cv修飾 (constとvolatile)も出来ません。 クラス名とスコープ解決演算子を使い、オブジェクト無しでコール出来ます。 |
public (変 化無し) | |
継承前 | 継承 後 |
private | private |
protected | protected |
public | public |
private (全 部private) | |
継承前 | 継 承後 |
private | private |
protected | private |
public | private |
protected (public だけprotectedに変化) | |
継承前 | 継 承後 |
private | private |
protected | protected |
public | protected |
ア クセス修飾子 | |
private | そ
のクラスのメンバーとフレンド関数しか触れません。 基底側でprivateだった物は、継承先で追加されたメンバー関数やフレンド関 数では触れないです。 |
public | 誰
でも触れます。 |
protected | そ
のクラスのメンバーとフレンド関数しか触れません。 基底側でprotectedだった物は、継承先で追加されたメンバー関数やフレン ド関数では触れます。 |
基 底クラスオブジェクト |
テーブルへのポインター |
派 生クラスオブジェクト |
仮引数の型 | 実引数の値 |
整数型 | 定数式 |
列挙型 | 定数式 |
関数 | 外部リンケージを持つ関数ポインター、または参照 仮引数にはCV修飾が可能で、実引数は仮引数よりCVが弱ければよい |
オブジェクト | 外部リンケージを持つオブジェクトのポインター、または参照 仮引数にはCV修飾が可能で、実引数は仮引数よりCVが弱ければよい |
関 数の種類 | 機能 | 継承物 |
非 仮想関数 | すべての派生クラスで共通 | インターフェイスと実装 |
非 純粋仮想関数 | 派生クラス独自の機能かデフォルトの機能 | インター フェイスとデフォルトの実装 |
純粋仮想関数 | 派 生クラス独自の機能 | インターフェイス |