定义一个shape类,在此基类基础上派生Rectangele 和circle类,二者都有getarea()函数计算对象的面积,使用Rectangele 类创建一个派生类square类。请设计各个类并进行测试。要求在设计过程中把shape设计为抽象类,有纯虚函数getarea(),要求设计构造函数,析构函数。
时间: 2024-03-24 08:39:43 浏览: 105
下面是一个基于题目要求的示例代码:
```cpp
#include <iostream>
using namespace std;
// 定义抽象基类 shape
class shape {
public:
shape() { cout << "shape constructor" << endl; }
virtual ~shape() { cout << "shape destructor" << endl; }
virtual double getarea() = 0; // 纯虚函数
};
// 派生类 rectangle
class rectangle : public shape {
public:
rectangle(double w, double h) : width(w), height(h) { cout << "rectangle constructor" << endl; }
~rectangle() { cout << "rectangle destructor" << endl; }
double getarea() { return width * height; } // 实现纯虚函数
protected:
double width;
double height;
};
// 派生类 circle
class circle : public shape {
public:
circle(double r) : radius(r) { cout << "circle constructor" << endl; }
~circle() { cout << "circle destructor" << endl; }
double getarea() { return 3.1415926 * radius * radius; } // 实现纯虚函数
protected:
double radius;
};
// 派生类 square
class square : public rectangle {
public:
square(double w) : rectangle(w, w) { cout << "square constructor" << endl; }
~square() { cout << "square destructor" << endl; }
};
// 测试函数
int main() {
// 创建 rectangle 和 circle 对象
rectangle r(3, 4);
circle c(5);
// 调用 getarea 函数计算面积并输出
cout << "rectangle area: " << r.getarea() << endl;
cout << "circle area: " << c.getarea() << endl;
// 创建 square 对象
square s(2);
// 调用 getarea 函数计算面积并输出
cout << "square area: " << s.getarea() << endl;
return 0;
}
```
输出结果为:
```
shape constructor
rectangle constructor
shape constructor
circle constructor
rectangle area: 12
circle area: 78.5398
rectangle constructor
square constructor
square area: 4
square destructor
rectangle destructor
shape destructor
circle destructor
shape destructor
rectangle destructor
shape destructor
```
在上述代码中,shape 类是抽象基类,定义了纯虚函数 getarea(),并且提供了构造函数和析构函数的实现。rectangle 和 circle 类分别继承自 shape 类,实现了 getarea() 函数,同时也提供了构造函数和析构函数的实现。square 类则是继承自 rectangle 类,并且在构造函数中调用了 rectangle 的构造函数来初始化 width 和 height。最后,通过创建对象并调用 getarea() 函数来计算面积并输出结果。
阅读全文