remplacer constructeur de c++

J'ai Une classe abstraite

class A{
 public:
  A(dim) : dim_(dim);
 private:
  int dim_;
}

et de classe B

class B : public A{
 public:
  B(int dim);
}

et j'ai besoin de faire du constructeur pour la classe B, qui fonctionne uniquement lorsque le dim > 1 et lancer des affirmations du contraire.

dans ce cas

B::B(int dim) : A(dim){
  assert(dim > 1);
}

cela fonctionne, mais ce n'est pas la bonne solution je pense, parce que l'instance de la classe a a été créé et supprimé.

Que je fais init-méthode pour la classe A:

class A{
 public:
  void init(int dim){
    dim_ = dim;
  }
  A(int dim){
    init(dim);
  }
 private:
  int dim_;
}

et de modifier le constructeur de la classe B:

class B : public A {
 public:
  B(int dim){
    assert(dim > 1);
    init(dim);
  }
}

mais ça ne fonctionne pas. Est-il possible de solutions pour mon problème?

  • classe A n'est pas abstrait...
  • d'une certaine manière, j'ai l'impression que le fait de compter sur "normal" dans votre ctor est pas la bonne approche.
InformationsquelleAutor user1761982 | 2013-01-05