#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;
}
プログラムの出力は、それが常にcalled.Isデフォルトの基底クラスのコンストラクタですC++呼び出して、基本クラスのコンストラクタ
creating shape
creating rectangle
creating shape
creating rectangle with attributes
Total area: 35
以下に示します。そこには理由がありますか?そしてこれが、Pythonのような言語が、C++のような暗黙の呼び出しではなく、基本クラスのコンストラクタの明示的な呼び出しを主張する理由ですか?
継承階層のすべてのコンストラクターが、[ベース] - > [派生]の順に呼び出されます。デストラクタは逆の順序で呼び出されます。 –
私の質問は、 "それは常に呼び出される基本クラスのデフォルトのコンストラクタですか?" – liv2hak
@ liv2hakしかし、私には、Rectangle(int h、int w)コンストラクタが2番目のRectangle initで呼び出されたようです... – Kupto