前言
大家好吖,欢迎来到 YY 滴C++考前速过系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!
- YY的《C++》专栏
- YY的《C++11》专栏
- YY的《Linux》专栏
- YY的《数据结构》专栏
- YY的《C语言基础》专栏
- YY的《初学者易错点》专栏
- YY的《小小知识点》专栏
- YY的《单片机期末速过》专栏
- YY的《C++期末速过》专栏
目录
- 程序1:
- 程序2:
- 程序3:
程序1:
- 写一个程序,定义抽象基类Container,由它派生出3个派生类:Sphere(球体)、Cylinder(圆柱体)、Cube(正方体)。用虚函数分别计算几种图形的表面积和体积。
以下是一个使用虚函数计算不同图形表面积和体积的示例程序:
#include <iostream>
#include <cmath>
using namespace std;// 抽象基类:Container
class Container {
public:virtual double calculateSurfaceArea() = 0;virtual double calculateVolume() = 0;
};// 派生类:Sphere(球体)
class Sphere : public Container {
private:double radius;public:Sphere(double r) : radius(r) {}double calculateSurfaceArea() override {return 4 * M_PI * radius * radius;}double calculateVolume() override {return (4.0 / 3.0) * M_PI * radius * radius * radius;}
};// 派生类:Cylinder(圆柱体)
class Cylinder : public Container {
private:double radius;double height;public:Cylinder(double r, double h) : radius(r), height(h) {}double calculateSurfaceArea() override {return 2 * M_PI * radius * radius + 2 * M_PI * radius * height;}double calculateVolume() override {return M_PI * radius * radius * height;}
};// 派生类:Cube(正方体)
class Cube : public Container {
private:double sideLength;public:Cube(double s) : sideLength(s) {}double calculateSurfaceArea() override {return 6 * sideLength * sideLength;}double calculateVolume() override {return sideLength * sideLength * sideLength;}
};int main() {Sphere s(5);Cylinder c(3, 7);Cube cu(4);cout << "Sphere Surface Area: " << s.calculateSurfaceArea() << endl;cout << "Sphere Volume: " << s.calculateVolume() << endl;cout << "Cylinder Surface Area: " << c.calculateSurfaceArea() << endl;cout << "Cylinder Volume: " << c.calculateVolume() << endl;cout << "Cube Surface Area: " << cu.calculateSurfaceArea() << endl;cout << "Cube Volume: " << cu.calculateVolume() << endl;return 0;
}
在这个示例中,我们定义了抽象基类
Container
,并派生出了Sphere
(球体)、Cylinder
(圆柱体)和
Cube
(正方体)三个派生类。每个派生类都实现了calculateSurfaceArea
和calculateVolume
虚函数来计算不同图形的表面积和体积。在main
函数中,我们创建了每种图形的实例,并输出了它们的表面积和体积。
程序2:
- 编写程序:定义抽象基类Shape,area( )为求图形面积的虚成员函数。由它派生出三个派生类:Circle(圆形)、Rectangle(长方形)、和Triangle (三角形),用虚函数area分别计算各种图形的面积。在主函数中,分别创建派生类的对象并计算其面积,求出它们的面积的和。要求用基类指针数组,使它的每一个元素指向一个派生类的对象,以体现多态性。
以下是一个使用多态性的示例程序,根据要求定义了抽象基类 Shape
和三个派生类 Circle
(圆形)、Rectangle
(长方形)和 Triangle
(三角形):
#include <iostream>
#include <cmath>
using namespace std;// 抽象基类:Shape
class Shape {
public:virtual double area() = 0;
};// 派生类:Circle(圆形)
class Circle : public Shape {
private:double radius;public:Circle(double r) : radius(r) {}double area() override {return M_PI * radius * radius;}
};// 派生类:Rectangle(长方形)
class Rectangle : public Shape {
private:double length;double width;public:Rectangle(double l, double w) : length(l), width(w) {}double area() override {return length * width;}
};// 派生类:Triangle(三角形)
class Triangle : public Shape {
private:double base;double height;public:Triangle(double b, double h) : base(b), height(h) {}double area() override {return 0.5 * base * height;}
};int main() {Shape* shapes[3];shapes[0] = new Circle(5);shapes[1] = new Rectangle(4, 6);shapes[2] = new Triangle(3, 8);double totalArea = 0;for (int i = 0; i < 3; i++) {totalArea += shapes[i]->area();}cout << "Total area of all shapes: " << totalArea << endl;for (int i = 0; i < 3; i++) {delete shapes[i];}return 0;
}
在这个示例中,我们定义了抽象基类
Shape
,并派生出了Circle
(圆形)、Rectangle
(长方形)和
Triangle
(三角形)三个派生类。每个派生类都实现了虚函数area
来计算不同图形的面积。在main
函数中,我们创建了一个基类指针数组,使其每个元素指向一个派生类的对象,以体现多态性。然后我们计算了每个图形的面积,并求出它们的面积的和。最后,记得释放动态分配的内存。
程序3:
- 计算正方体、球体、圆柱体的体积。要求:定义基类shape,在其中定义求体积的纯虚函数volume,并定义一个数据成员r,它可作为球体的半径、正方体的边长以及圆柱体的底面圆半径。由shape类派生出3个类,分别是正方体类、球体类和圆柱体类,在这3个类中都具有求体积的重定义版本。在主函数中统一求3种对象的体积,实现多态性。
以下是符合您要求的C++程序,其中定义了一个抽象基类 Shape
,并派生出了 Cube
(正方体)、Sphere
(球体)和 Cylinder
(圆柱体)三个派生类:
#include <iostream>
#include <cmath>
using namespace std;// 抽象基类:Shape
class Shape {
public:virtual double volume() = 0;
};// 派生类:Cube(正方体)
class Cube : public Shape {
private:double sideLength;public:Cube(double s) : sideLength(s) {}double volume() override {return sideLength * sideLength * sideLength;}
};// 派生类:Sphere(球体)
class Sphere : public Shape {
private:double radius;public:Sphere(double r) : radius(r) {}double volume() override {return (4.0 / 3.0) * M_PI * pow(radius, 3);}
};// 派生类:Cylinder(圆柱体)
class Cylinder : public Shape {
private:double radius;double height;public:Cylinder(double r, double h) : radius(r), height(h) {}double volume() override {return M_PI * pow(radius, 2) * height;}
};int main() {Shape* shapes[3];shapes[0] = new Cube(5); // 正方体边长为5shapes[1] = new Sphere(3); // 球体半径为3shapes[2] = new Cylinder(4, 6); // 圆柱体底面圆半径为4,高度为6for (int i = 0; i < 3; i++) {cout << "Volume of shape " << i+1 << ": " << shapes[i]->volume() << endl;}for (int i = 0; i < 3; i++) {delete shapes[i];}return 0;
}
在这个示例中,我们定义了抽象基类
Shape
,并派生出了Cube
(正方体)、Sphere
(球体)和
Cylinder
(圆柱体)三个派生类。每个派生类都实现了虚函数volume
来计算不同图形的体积。在main
函数中,我们创建了一个基类指针数组,使其每个元素指向一个派生类的对象,以体现多态性。然后我们计算了每个图形的体积,并输出结果。最后,记得释放动态分配的内存。