C ++ - Aufruf von Basisklassenkonstruktoren

#include <iostream>
#include <stdio.h> 
using namespace std;

// Base class
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
      Shape()
      {
    printf("creating shape \n");
      }
      Shape(int h,int w)
      {
     height = h;
         width = w;
         printf("creatig shape with attributes\n");
      } 
   protected:
      int width;
      int height;
};

// Derived class
class Rectangle: public Shape
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
      Rectangle()
      {
     printf("creating rectangle \n");
      }
      Rectangle(int h,int w)
      {
     printf("creating rectangle with attributes \n");
     height = h;
         width = w;
      }
};

int main(void)
{
   Rectangle Rect;

   Rect.setWidth(5);
   Rect.setHeight(7);

   Rectangle *square = new Rectangle(5,5);
   // Print the area of the object.
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

Die Ausgabe des Programms ist unten angegeben

creating shape 
creating rectangle 
creating shape 
creating rectangle with attributes 
Total area: 35

Wenn ich die beiden abgeleiteten Klassenobjekte konstruiere, sehe ich, dass standardmäßig immer der Basisklassenkonstruktor zuerst aufgerufen wird. Gibt es einen Grund dafür? Ist dies der Grund, warum Sprachen wie Python auf expliziten Aufrufen von Basisklassenkonstruktoren bestehen und nicht auf impliziten Aufrufen wie C ++?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage