抽象基类Shape派生3个类 声明抽象基类Shape,由它派生出三个类,圆形Circle,矩形Rectangle,三角形Triangle,用一个函数输出三个面积。以上是一个c++题目请帮我写一份实验报告
时间: 2024-01-01 09:03:56 浏览: 193
实验报告:抽象基类Shape派生3个类
实验目的
本实验旨在通过设计一个抽象基类Shape及其派生类Circle、Rectangle、Triangle,掌握C++中的抽象类、纯虚函数、多态等概念,以及类的继承和多态性的实现方法。
实验原理
抽象类
在C++中,抽象类是不能被实例化的类。它们仅用于作为其他类的基类,以便其他类可以继承它们的成员函数。抽象类中有一个或多个纯虚函数,这些纯虚函数没有函数体,需要由其派生类实现。
纯虚函数
纯虚函数是抽象类中的一种特殊函数,它是没有函数体的虚函数。纯虚函数必须在派生类中被重新定义,以便实现多态性。
多态性
多态性是指同一个函数名称可以在不同的类中使用,并且有不同的实现方式。在C++中,多态性通过函数重载和函数重写来实现。
类的继承
类的继承是指一个新类可以从一个现有的类中派生,从而获得现有类的属性和方法。派生类可以访问基类的公有成员函数和数据成员,但不能访问基类的私有成员函数和数据成员。
实验步骤
1.设计抽象基类Shape
抽象基类Shape中声明一个纯虚函数getArea(),用于求面积,代码如下:
```c++
class Shape {
public:
virtual double getArea() = 0;
};
```
2.设计派生类Circle
派生类Circle从抽象基类Shape中继承getArea()函数,并实现计算圆形面积的方法,代码如下:
```c++
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
double getArea() override {
return 3.14 * radius * radius;
}
private:
double radius;
};
```
3.设计派生类Rectangle
派生类Rectangle从抽象基类Shape中继承getArea()函数,并实现计算矩形面积的方法,代码如下:
```c++
class Rectangle : public Shape {
public:
Rectangle(double w, double h) : width(w), height(h) {}
double getArea() override {
return width * height;
}
private:
double width, height;
};
```
4.设计派生类Triangle
派生类Triangle从抽象基类Shape中继承getArea()函数,并实现计算三角形面积的方法,代码如下:
```c++
class Triangle : public Shape {
public:
Triangle(double b, double h) : base(b), height(h) {}
double getArea() override {
return 0.5 * base * height;
}
private:
double base, height;
};
```
5.测试
在主函数中,定义三个对象c、r、t分别属于Circle、Rectangle、Triangle类,并用一个函数输出它们的面积,代码如下:
```c++
void printArea(Shape& s) {
cout << "The area is: " << s.getArea() << endl;
}
int main() {
Circle c(3.0);
Rectangle r(4.0, 5.0);
Triangle t(6.0, 7.0);
printArea(c);
printArea(r);
printArea(t);
return 0;
}
```
运行结果如下:
```
The area is: 28.26
The area is: 20
The area is: 21
```
实验结论
本实验通过设计一个抽象基类Shape及其派生类Circle、Rectangle、Triangle,掌握了C++中的抽象类、纯虚函数、多态等概念,以及类的继承和多态性的实现方法。在程序中,通过定义一个函数printArea(),实现了输出不同形状面积的功能。
阅读全文