Shape基本クラスからポインターを作成した場合、それを円(派生)クラスのように動作させるにはどうすればよいですか?これが私のクラス定義です:
//CShape.h class definition
//Shape class definition
#ifndef CSHAPE_H
#define CSHAPE_H
class CShape
{
protected:
float area;
virtual void calcArea();
public:
float getArea()
{
return area;
}
};
class CCircle : public CShape
{
protected:
int centerX;
int centerY;
float radius;
void calcArea()
{
area = float(M_PI * (radius * radius));
}
public:
CCircle(int pCenterX, int pCenterY, float pRadius)
{
centerX = pCenterX;
centerY = pCenterY;
radius = pRadius;
}
float getRadius()
{
return radius;
}
};
これらのオブジェクトを呼び出しているプロジェクトファイルには、次のコードがあります。
CShape *basePtr = new CCircle(1, 2, 3.3);
basePtr->getRadius();
これでうまくいくように思えますが、CShapeにはメンバー「getRadius()」がないと言われています。
編集以下の応答に基づいて、basePtrオブジェクトを次のようにCCircleにdynamic_castしようとしました。
CCircle *circle = new CCircle(1, 2, 3.3);
basePtr = dynamic_cast<CCircle *>(circle);
しかし、これも失敗しました。私はdynamic_castを行ったことがなく、C ++の構文のほとんどに慣れていないため、助けていただければ幸いです。