Quand avons-nous besoin d'un constructeur par défaut?

Ma question est simple. Quand avons-nous besoin d'avoir un constructeur par défaut?
Veuillez consulter le code ci-dessous:

class Shape
{
    int k;

public:
    Shape(int n) : k(n) {}
    ~Shape() {}
};

class Rect : public Shape
{
    int l;

public:
    Rect(int n): l(n)
    {}      //error C2512: 'Shape' : no appropriate default constructor available

    ~Rect() {}
};
  1. Pourquoi le compilateur ne génère pas l'argument zero constructeur par défaut de manière implicite dans la classe Rect?
  2. Selon mes connaissances, si une classe (Rect) est dérivée d'une autre classe (la Forme) qui a constructeur par défaut (soit générées implicitement ou explicitement prévu), le constructeur par défaut devrait être généré par le compilateur.

source d'informationauteur XMarshall