# 【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性（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:

public:

double calculateSurfaceArea() override {
}

double calculateVolume() override {
}
};

// 派生类：Cylinder（圆柱体）
class Cylinder : public Container {
private:
double height;

public:
Cylinder(double r, double h) : radius(r), height(h) {}

double calculateSurfaceArea() override {
}

double calculateVolume() override {
}
};

// 派生类：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;
}


Cube（正方体）三个派生类。每个派生类都实现了 calculateSurfaceArea

calculateVolume

## 程序2：

#include <iostream>
#include <cmath>
using namespace std;

// 抽象基类：Shape
class Shape {
public:
virtual double area() = 0;
};

// 派生类：Circle（圆形）
class Circle : public Shape {
private:

public:

double area() override {
}
};

// 派生类：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;
}


Triangle（三角形）三个派生类。每个派生类都实现了虚函数 area 来计算不同图形的面积。在 main

## 程序3：

#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:

public:

double volume() override {
return (4.0 / 3.0) * M_PI * pow(radius, 3);
}
};

// 派生类：Cylinder（圆柱体）
class Cylinder : public Shape {
private:
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); // 正方体边长为5
shapes[1] = new Sphere(3); // 球体半径为3
shapes[2] = new Cylinder(4, 6); // 圆柱体底面圆半径为4，高度为6

for (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;
}


Cylinder（圆柱体）三个派生类。每个派生类都实现了虚函数 volume 来计算不同图形的体积。在 main

Cylinder（圆柱体）三个派生类。每个派生类都实现了虚函数 volume 来计算不同图形的体积。在 main

|
17天前
|

【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
20 1
|
11天前
|
C++
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
13 1
|
13天前
|

C/C++爱心代码
C/C++爱心代码
29 2
|
17天前
|

【PTA】L1-064 估值一亿的AI核心代码（详C++）
【PTA】L1-064 估值一亿的AI核心代码（详C++）
15 1
|
17天前
|

C++课程设计实验杭州电子科技大学ACM题目（中）
C++课程设计实验杭州电子科技大学ACM题目（中）
14 1
|
22天前
|
C++ 编译器
C++中的注释作用
C++ 代码中的注释可提高可读性，有单行和多行两种形式。单行注释以 // 开始，多行注释用 /* ... */ 包裹。#if 0 ... #endif 用于条件编译，可实现可屏蔽的代码块，常用于调试。#if 后可跟条件表达式，在满足条件时执行相应代码。
17 4
|
11天前
|
C++ 编译器
【C++语言】Date类的代码实现（操作符重载运用）
【C++语言】Date类的代码实现（操作符重载运用）
13 0
|
17天前
|

C++课程设计实验杭州电子科技大学ACM题目（下）
C++课程设计实验杭州电子科技大学ACM题目（下）
12 0
|
17天前
|

C++课程设计实验杭州电子科技大学ACM题目（上）
C++课程设计实验杭州电子科技大学ACM题目（上）
11 0
|
21天前
|

C++中的注释作用
C++ 中的注释用于提高代码可读性，有单行和多行两种形式。单行注释以 // 开始，多行注释用 /* ... */ 包裹。#if 0 ... #endif 用于条件编译，可实现代码的临时屏蔽，适用于调试和测试。
14 0