实习考试题目:(知识点:类的定义、类的聚合、类的继承、虚函数、运行时多态) 2. 定义一个抽象类CShape;类中要具有以下虚函数: (1)求面积; (2)求周长; 定义一个二维平面上的点类,这个点类将被矩形类和圆类聚合; 定义一个矩形的类;继承CShape类; (1)覆盖基类中求面积的函数; (2)覆盖基类中求周长的函数; 定义一个圆的类;继承CShape类; (1)覆盖基类中求面积的函数; (2) 覆盖基类中求周长的函数; 在主函数中,实现以下功能: (1)输入左上角点和右下角点的坐标;求矩形的面积和周长; (2) 输入圆心和半径,求圆的面积和周长; (要求: 用指向基类的指针或引用实现运行时的多态)
时间: 2023-05-12 18:03:46 浏览: 190
C知道回答:
这是一个关于类的定义、聚合、继承、虚函数和运行时多态的实习考试题目。首先,我们需要定义一个抽象类CShape,其中包含求面积和周长的虚函数。然后,我们需要定义一个二维平面上的点类,这个点类将被矩形类和圆类聚合。接着,我们需要定义一个矩形的类,它继承自CShape类,并覆盖基类中求面积和周长的函数。同样地,我们需要定义一个圆的类,它也继承自CShape类,并覆盖基类中求面积和周长的函数。
在主函数中,我们可以通过输入左上角点和右下角点的坐标来求矩形的面积和周长,或者通过输入圆心和半径来求圆的面积和周长。为了实现运行时多态,我们可以使用指向基类的指针或引用来调用不同的子类函数。
以下是一个可能的实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
class CShape {
public:
virtual double getArea() = 0;
virtual double getPerimeter() = 0;
};
class Point {
public:
Point(double x, double y) : m_x(x), m_y(y) {}
double getX() { return m_x; }
double getY() { return m_y; }
private:
double m_x, m_y;
};
class Rectangle : public CShape {
public:
Rectangle(Point topleft, Point bottomright) : m_topleft(topleft), m_bottomright(bottomright) {}
double getArea() override {
double width = m_bottomright.getX() - m_topleft.getX();
double height = m_bottomright.getY() - m_topleft.getY();
return width * height;
}
double getPerimeter() override {
double width = m_bottomright.getX() - m_topleft.getX();
double height = m_bottomright.getY() - m_topleft.getY();
return 2 * (width + height);
}
private:
Point m_topleft, m_bottomright;
};
class Circle : public CShape {
public:
Circle(Point center, double radius) : m_center(center), m_radius(radius) {}
double getArea() override {
return M_PI * m_radius * m_radius;
}
double getPerimeter() override {
return 2 * M_PI * m_radius;
}
private:
Point m_center;
double m_radius;
};
int main() {
Point topleft(0, 0);
Point bottomright(3, 4);
Rectangle rect(topleft, bottomright);
CShape* shape1 = ▭
cout << "Rectangle area: " << shape1->getArea() << endl;
cout << "Rectangle perimeter: " << shape1->getPerimeter() << endl;
Point center(0, 0);
double radius = 5;
Circle circle(center, radius);
CShape* shape2 = &circle;
cout << "Circle area: " << shape2->getArea() << endl;
cout << "Circle perimeter: " << shape2->getPerimeter() << endl;
return 0;
}
```
阅读全文