準・究極の選択

クラスについて、デフォルトコンストラクタについて理解が乏しいのですが、クラスB側で何か細工をすると、クラスAのデフォルトコンストラクタ無しで、エラーなくコンパイルできるのでしょうか?
派生クラスの親のベースクラスのコンストラクタを呼ぶsuper?でOKなのでしょうか?


#include "stdafx.h"

class A {
public:
//A(){} // これをコメントアウトにすると
// error C2512: 'B' : クラス、構造体、共用体にデフォルト コンストラクタがありません。
A(int x){}
~A(){};
};

class B : A {

};

void main(void){
B b;

}

A 回答 (2件)

B のデフォルトコンストラクタはそのままでは、まず A のデフォルトコンストラクタを呼びにいくからこのままでは NG。



class B : A {
public:
 B() : A(0) {}
}

のように明示的に A のコンストラクタを指定すればよい。

super って Java の予約語だっけ?
    • good
    • 0
この回答へのお礼

Bクラス側の場合は理解しました。

Aクラス側で A(){}とせずに、
A(){ A(0) }は可能でしょうか?

>super って Java の予約語だっけ?
親(ベース)のクラスのコンストラクタを呼びたかったのですが、
頭の中が整理できていませんでした。

お礼日時:2007/10/06 23:50

>Aクラス側で A(){}とせずに、


>A(){ A(0) }は可能でしょうか?

A() { A(0); } ならできますが、意味はありません。
単に A 型のオブジェクト A(0) を一時的に作成して捨てているだけです。

まずは普通にコードが書けるようになるのが先でしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!