Pourquoi est purement virtuel/classe abstraite, le constructeur, en particulier pour une protection de l'const variables de membre?

J'ai purement virtuel de la classe définies en tant que telles:

class BaseClass {
 protected:
  const int var;
 public:
  void somefun() = 0; //what I mean by a purely virtual class
  //stuff...
};

Si je n'ai pas d'ajouter un constructeur défini comme tel:

BaseClass(const int & VAR) : var(VAR) {};

que j'aurais par la suite à jamais dérivée de la classe, ma classe dérivée ne peut pas initialiser la variable const var selon la valeur qu'il veut. Maintenant, j'ai vraiment comprendre ce qui se passe ici. Avant de construire une classe dérivée, un constructeur de la classe de base est appelé, à quel point const variables de membre doit être initialisé. Ma question n'est pas "comment faire pour que mon code de travail" genre de question, qui a déjà été fait. Ma question est de savoir pourquoi le compilateur pense que c'est nécessaire. Pour une purement virtuel de la classe, je ne devrais pas avoir le droit d'écrire quelque chose comme:

class DerivedClass : BaseClass {
 public:
  DerivedClass() : var(SOME_VALUE) {};
}

Si le compilateur sait qu'un appel à une BaseClass constructeur sera nécessairement suivie par un appel à une classe dérivée de constructror (depuis un objet de type abstrait ne peut jamais être instancié) ne devrait-il pas nous donner un peu plus de marge de manœuvre?

Est-ce une conséquence de la manière dont C++ choisit de contourner le Diamant problème? Même si c'était le cas, n'est pas le compilateur au moins en quelque sorte accepter la possibilité que const variable de membre de purement virtuel fonctions seront définies dans les classes dérivées? Est-ce trop compliqué ou qui ne plaisante pas avec le C++ solution pour le Diamant problème?

Merci pour l'aide tout le monde.

Probablement parce que le compilateur aurait à appliquer la règle que les classes dérivées doivent initialiser protégé les membres de leur classe de base, ce qui serait un peu compliqué.
Je pense que c'est vrai qu'il le fait. Mais est-ce vraiment nécessaire dans cette situation?

OriginalL'auteur ticster | 2012-02-22