私は抽象クラスAを持っています
class A{
public:
A(dim) : dim_(dim);
private:
int dim_;
}
そしてクラスB
class B : public A{
public:
B(int dim);
}
クラス B のコンストラクターを作成する必要があります。これは、dim > 1 の場合にのみ機能し、それ以外の場合はアサーションをスローします。
この場合
B::B(int dim) : A(dim){
assert(dim > 1);
}
それは機能しますが、クラス A のインスタンスが作成されて削除されたため、良い解決策ではないと思います。
クラスAのinit-methodを作成するよりも:
class A{
public:
void init(int dim){
dim_ = dim;
}
A(int dim){
init(dim);
}
private:
int dim_;
}
クラス B のコンストラクタを変更します。
class B : public A {
public:
B(int dim){
assert(dim > 1);
init(dim);
}
}
しかし、うまくいきません。私の問題の解決策はありますか?