用c++实现定义一个抽象类CShape;类中要具有以下虚函数: (1)求面积; (2)求周长; 定义一个二维平面上的点类,这个点类将被矩形类和圆类聚合; 定义一个矩形的类;继承CShape类; (1)覆盖基类中求面积的函数; (2)覆盖基类中求周长的函数; 定义一个圆的类;继承CShape类; (1)覆盖基类中求面积的函数; (2) 覆盖基类中求周长的函数; 在主函数中,实现以下功能: (1)输入左上角点和右下角点的坐标;求矩形的面积和周长; (2) 输入圆心和半径,求圆的面积和周长; (要求: 用指向基类的指针或引用实现运行时的多态)
时间: 2023-04-07 22:05:11 浏览: 124
好的,这是一个关于C++编程的问题,我可以回答。首先,定义一个抽象类CShape,它包含两个纯虚函数,分别是求面积和求周长。代码如下:
```
class CShape {
public:
virtual double getArea() = 0;
virtual double getPerimeter() = 0;
};
```
接下来,定义一个二维平面上的点类,代码如下:
```
class CPoint {
public:
double x, y;
};
```
然后,定义一个矩形类,它继承自CShape类,并覆盖了求面积和求周长的函数。代码如下:
```
class CRectangle : public CShape {
public:
CRectangle(CPoint p1, CPoint p2) {
m_p1 = p1;
m_p2 = p2;
}
double getArea() {
return abs(m_p1.x - m_p2.x) * abs(m_p1.y - m_p2.y);
}
double getPerimeter() {
return 2 * (abs(m_p1.x - m_p2.x) + abs(m_p1.y - m_p2.y));
}
private:
CPoint m_p1, m_p2;
};
```
最后,定义一个圆类,它也继承自CShape类,并覆盖了求面积和求周长的函数。代码如下:
```
class CCircle : public CShape {
public:
CCircle(CPoint center, double radius) {
m_center = center;
m_radius = radius;
}
double getArea() {
return 3.1415926 * m_radius * m_radius;
}
double getPerimeter() {
return 2 * 3.1415926 * m_radius;
}
private:
CPoint m_center;
double m_radius;
};
```
在主函数中,我们可以通过指向基类的指针或引用实现运行时的多态。代码如下:
```
int main() {
CPoint p1 = {0, 0};
CPoint p2 = {3, 4};
CRectangle rect(p1, p2);
CShape* pShape = ▭
cout << "Rectangle area: " << pShape->getArea() << endl;
cout << "Rectangle perimeter: " << pShape->getPerimeter() << endl;
CPoint center = {0, 0};
double radius = 5;
CCircle circle(center, radius);
pShape = &circle;
cout << "Circle area: " << pShape->getArea() << endl;
cout << "Circle perimeter: " << pShape->getPerimeter() << endl;
return 0;
}
```
这样就实现了用C++定义一个抽象类CShape,并通过继承和多态实现了矩形类和圆类的面积和周长的求解。
阅读全文