C ++ llamando a los constructores de la clase base
#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;
}
La salida del programa se da a continuación.
creating shape
creating rectangle
creating shape
creating rectangle with attributes
Total area: 35
Cuando construyo los dos objetos de clase derivados, veo que siempre es el constructor de la clase base que se llama primero por defecto. ¿Hay alguna razón para esto? ¿Es esta la razón por la que los lenguajes como Python insisten en llamadas explícitas de constructores de clase base en lugar de llamadas implícitas como C ++?