C++ チェックリスト

□カプセル化
□ポリモーフィズム
□関数のオーバロード
□演算子のオーバロード
□継承
□入力演算子
□出力演算子
Q次のコメントは有効か?
/*
aaaa//bbbb
*/y
□有効。
□スコープ演算子(::)関数をクラスの外で定義(宣言ではなく実装)する。
□ドット演算子(.)・・・オブジェクト名.変数名でオブジェクト内のメンバ変数にアクセスできる
□C++では引数を受け取らない関数の仮引数宣言は(void)ではなく()にすべき
□C++では戻り値を指定した関数は必ず値を返さなければならない
□関数のオーバーロード引数の異なる名前の同じ関数を宣言できる。コンパイラが判断
□関数のオーバーロードは戻り値が異なるだけではダメ
□コンストラクタ関数により初期化処理など
□デスクラクタ関数により解放処理など
□デスクラクタ関数には仮引き数が存在しない
□コンストラクタ関数の引き数にオブジェクトを識別する変数を追加するとデバッグの際にオブジェクトの特定が容易になる
□継承・・・ある1つのクラスが他のクラスの特性を受け継ぐこと
□基本クラス・・・継承のときに特性を受け継がれるクラス
□派生クラス・・・継承のときに特性を受け継ぐクラス
□アロー演算子:オブジェクトのポインタを使用し、オブジェクトのメンバにアクセスする
Qクラス、構造対の違いは?
□メンバがデフォルトで構造対では公開・クラスでは非公開
□コンストラクタ、デスクラクタ、メンバ関数は同じ
□無名共用体 :宣言した変数が同じメモリを指すようになる。但し、通常のように”.”使ったアクセスはできなくなる(オブジェクトみたいな単位自体がなくなる)
Q無名共用体は次の制限が発生する(3つ答えよ)
□グローバル無名共用体は static として宣言してはならない
□無名共用体には、非公開メンバを含めることはできない
□無名共用体のメンバの名前は、同じスコープ内の他の識別子と重複してはならない
□無名共用体はオブジェクトの参照をすることなく直接アクセスできる
□インライン関数の利点:関数呼び出しとその終了にかかるオーバーヘッド
□フレンド関数:1つ、または2つ以上のクラス内に含まれる非公開メンバにアクセスできる

□参照仮引数
仮引数の変数に&を付ける int &a
関数内でnは呼び出し元で渡した変数のアドレスになる。また、インクリメントなどを行うと実態として処理される
□被保護のメンバをpublicと継承すると、派生クラスの被保護メンバをなる。
□被保護のメンバをprivateと継承すると、派生クラスの非公開メンバをなる。
□被保護のメンバをprotectedと継承すると、派生クラスの被保護メンバをなる。
□被保護が必要な理由は、あるクラスのメンバを非公開にしたまま派生クラスからメンバにアクセスしたい場合
各インプリメントの対象は何か
□*A++ ポインタ
□*A-- ポインタ
□*++A ポインタ
□*--A ポインタ
□(*A)++ オブジェクト
□(*A)-- オブジェクト
□++*A オブジェクト
□--*A オブジェクト
□関数のポインタのことをエントリポインタという(C言語)
□関数のポインタ=strlen strlen()の場合
□どのオーバロード関数のアドレスを取得されるかはポインタの宣言時に決定される
□明示的にコンストラクタを宣言すると、デフォルトコンストラクタは失われる
□コンストラクタをオーバロードする理由の1つは、各状態に応じた初期化をするため
Qコピーコンストラクタの一般的な形式を記述せよ
□classname( const classname &obj )
Qコピーコンストラクタが発生する3つの場合を述べよ
□明示的にあるオブジェクトを用いクラスを初期した場合
□関数に仮引数としてオブジェクトを渡したとき
□関数からの復帰の際に、一時的にクラスが作成されたとき
□デフォルト引数とは仮引数に値を指定していなかった場合に使われる値
□デフォルト引数を受け取る仮引数は、デフォルト引数を受け取らない仮引数の右側になくてはいけない
□int *aaaa()は有効な宣言である
Qオーバーロードによって生じるあいまいさのケースを考えろ
□自動方変換
□参照
□デフォルト引数
□コピーコンストラクタは、クラスのオブジェクトをコピーする際に、厳密にコピーすると副作用が出てくる場合を防ぐために使用する
演算子のオーバーロード
□演算子のオーバーロードには、ユーザによって定義された何らかのクラスを関連付けなくてはならない
□演算子関数が必要
□演算子関数は該当クラスのメンバかフレンド関数である
□メンバ演算子関数の形式を書け
return-type classname::operater#( arg-list ){}
□オーバーロードできない演算子を書け
. :: .* ?