C++编程练习:多态实验——利用抽象类和纯虚函数,编程计算正方体、球体和圆柱体的表面积和体积。

简介: C++编程练习:多态实验——利用抽象类和纯虚函数,编程计算正方体、球体和圆柱体的表面积和体积。

例、要求利用抽象类和纯虚函数,编程设计一个程序计算正方体、球体和圆柱体的表面积和体积,具体要求如下:


1、设计一个抽象类为公共基类


2、设计成员函数source_area( ),求表面积;


3、设计成员函数volume( ),求体积;


4、定义数据成员r;


5、派生类cube、sphere、cylinder分别表示正方体类、球体类和圆柱体类。


程序如下:

//头文件
#include <iostream>
using namespace std;
#define PI 3.141265
class Solid             //定义抽象类
{
protected:
  double r;
  double s, v;
public:
  virtual double S() = 0;
  virtual double V() = 0;
  Solid(double a, double b, double c)
  {
  r = a;
  s = b;
  v = c;
  }
};
class Cube :public Solid
{
public:
  Cube(double a, double b, double c) : Solid(a, b, c)
  {
  }
  double S()
  {
  s = 6 * r * r;
  return s;
  }
  double V()
  {
  v = r * r * r;
  return v;
  }
};
class Sphere :public Solid
{
public:
  Sphere(double a, double b, double c) : Solid(a, b, c)
  {
  }
  double S()
  {
  s = 4 * PI * r * r;
  return s;
  }
  double V()
  {
  v = PI * r * r * r * 4 / 3;
  return v;
  }
};
class Cylinder :public Solid
{
protected:
  double high;
public:
  Cylinder(double h, double r, double a, double v) : Solid(r, a, v)
  {
  high = h;
  }
  double S()
  {
  s = 2 * PI * r * r + 2 * PI * r * high;
  return s;
  }
  double V()
  {
  v = PI * r * r * high;
  return v;
  }
};
double source_area(Solid* p)
{
  return p->S();
}
double volume(Solid* p)
{
  return p->V();
}
//主函数
#include"头文件.h"
#include <iostream>
using namespace std;
int main()
{
  char a;
  double r0, h;
  cout << "请输入正方体的边长:" << endl;
  cin >> r0;
  Cube cube(r0, 0, 0);
  cout << "正方体的表面积为:" << source_area(&cube) << endl << "正方体的体积为:" << volume(&cube) << endl;
  cout << "-------------------------";
  cout << "" << endl;
  cout << "请输入球体的半径:" << endl;
  cin >> r0;
  Sphere sphere(r0, 0, 0);
  cout << "球体的表面积为:" << source_area(&sphere) << endl << "球体的体积为:" << volume(&sphere) << endl;
  cout << "-------------------------";
  cout << "" << endl;
  cout << "请输入圆柱体的的底面半径:" << endl;
  cin >> r0;
  cout << "请输入圆柱体的的高:" << endl;
  cin >> h;
  Cylinder cylinder(r0, h, 0, 0);
  cout << "球体的表面积为:" << source_area(&cylinder) << endl << "球体的体积为:" << volume(&cylinder) << endl;
  system("pause");
  return 0;
}

测试结果如下:

1666890396722.jpg

以上就是本次C++的全部内容,感谢您的阅读和支持,篇幅较长,若有表述或者代码中的不当之处,望指出!您的指出和建议能给作者带来很大的动力!!!


相关文章
|
2月前
|
安全 编译器 C++
C++一分钟之-编译时计算:constexpr与模板元编程
【6月更文挑战第28天】在C++中,`constexpr`和模板元编程用于编译时计算,提升性能和类型安全。`constexpr`指示编译器在编译时计算函数或对象,而模板元编程通过模板生成类型依赖代码。常见问题包括误解constexpr函数限制和模板递归深度。解决策略包括理解规则、编写清晰代码、测试验证和适度使用。通过实战示例展示了如何使用`constexpr`计算阶乘和模板元编程计算平方。
50 13
|
2月前
|
编译器 C++ 开发者
C++一分钟之-C++20新特性:模块化编程
【6月更文挑战第27天】C++20引入模块化编程,缓解`#include`带来的编译时间长和头文件管理难题。模块由接口(`.cppm`)和实现(`.cpp`)组成,使用`import`导入。常见问题包括兼容性、设计不当、暴露私有细节和编译器支持。避免这些问题需分阶段迁移、合理设计、明确接口和关注编译器更新。示例展示了模块定义和使用,提升代码组织和维护性。随着编译器支持加强,模块化将成为C++标准的关键特性。
103 3
|
21天前
|
人工智能 JavaScript 开发工具
C++中的AI编程助手添加
今天为大家推荐一款适配了 Viusal Studio(本文使用),VS Code(本文使用),JetBrains系列以及Vim等多种编译器环境的插件 Fitten Code,Fitten Code 是由非十大模型驱动的 AI 编程助手,它可以自动生成代码,提升开发效率,帮您调试 Bug,节省您的时间,另外还可以对话聊天,解决您编程碰到的问题。 Fitten Code免费且支持 80 多种语言:Python、C++、Javascript、Typescript、Java等。
67 8
|
26天前
|
机器学习/深度学习 算法 C++
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
|
1月前
|
C++ 开发者
C++一分钟之-编译时计算:constexpr与模板元编程
【7月更文挑战第2天】C++的`constexpr`和模板元编程(TMP)实现了编译时计算,增强代码效率。`constexpr`用于声明编译时常量表达式,适用于数组大小等。模板元编程则利用模板进行复杂计算。常见问题包括编译时间过长、可读性差。避免方法包括限制TMP使用,保持代码清晰。结合两者可以解决复杂问题,但需明确各自适用场景。正确使用能提升代码性能,但需平衡复杂性和编译成本。
57 3
|
2月前
|
C++ 容器
C++之评委打分案例(vector与deque容器练习)
C++之评委打分案例(vector与deque容器练习)
24 1
|
2月前
|
存储 C++
【C++航海王:追寻罗杰的编程之路】一篇文章带你了解二叉搜索树
【C++航海王:追寻罗杰的编程之路】一篇文章带你了解二叉搜索树
27 1
|
2月前
|
存储 自然语言处理 C++
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
26 0
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
|
2月前
|
存储 JavaScript 前端开发
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
|
2月前
|
设计模式 编译器 C++
【C++航海王:追寻罗杰的编程之路】特殊类的设计方式你知道哪些?
【C++航海王:追寻罗杰的编程之路】特殊类的设计方式你知道哪些?
16 0