#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;
}
Вывод программы приведен ниже
creating shape
creating rectangle
creating shape
creating rectangle with attributes
Total area: 35
При построении обоих объектов производного класса я вижу, что он всегда является конструктором базового класса по умолчанию, который вызывается. Есть ли причина для этого? И является ли это причиной того, что такие языки, как python, настаивают на явных вызовах конструкторов базового класса, а не на неявные вызовы типа С++?