如果我从我的 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,如下所示:
CCircle *circle = new CCircle(1, 2, 3.3);
basePtr = dynamic_cast<CCircle *>(circle);
然而,这也失败了。我从未做过 dynamic_cast 并且不熟悉 C++ 中的大部分语法,因此非常感谢任何帮助。