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++的全部内容,感谢您的阅读和支持,篇幅较长,若有表述或者代码中的不当之处,望指出!您的指出和建议能给作者带来很大的动力!!!


相关文章
|
存储 人工智能 编译器
c++--多态
上一篇文章已经介绍了c++的继承,那么这篇文章将会介绍多态。看完多态的概念,你一定会感觉脑子雾蒙蒙的,那么我们先以举一个例子,来给这朦胧大致勾勒出一个画面,在此之前,先介绍一个名词虚函数,(要注意与虚拟继承区分)重定义: 重定义(隐藏)只要求函数名相同(但要符合重载的要求,其实两者实际上就是重载);重定义下:在这种情况下,如果通过父类指针或引用调用函数,会调用父类的函数而不是子类。重定义(或称为隐藏)发生的原因是因为函数名相同但参数列表不同,导致编译器无法确定调用哪一个版本的函数。
266 0
|
存储 编译器 C++
【c++】多态(多态的概念及实现、虚函数重写、纯虚函数和抽象类、虚函数表、多态的实现过程)
本文介绍了面向对象编程中的多态特性,涵盖其概念、实现条件及原理。多态指“一个接口,多种实现”,通过基类指针或引用来调用不同派生类的重写虚函数,实现运行时多态。文中详细解释了虚函数、虚函数表(vtable)、纯虚函数与抽象类的概念,并通过代码示例展示了多态的具体应用。此外,还讨论了动态绑定和静态绑定的区别,帮助读者深入理解多态机制。最后总结了多态在编程中的重要性和应用场景。 文章结构清晰,从基础到深入,适合初学者和有一定基础的开发者学习。如果你觉得内容有帮助,请点赞支持。 ❤❤❤
1743 1
|
编译器 C++
c++中的多态
c++中的多态
|
Serverless 编译器 C++
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
390 4
|
存储 编译器 数据安全/隐私保护
【C++】多态
多态是面向对象编程中的重要特性,允许通过基类引用调用派生类的具体方法,实现代码的灵活性和扩展性。其核心机制包括虚函数、动态绑定及继承。通过声明虚函数并让派生类重写这些函数,可以在运行时决定具体调用哪个版本的方法。此外,多态还涉及虚函数表(vtable)的使用,其中存储了虚函数的指针,确保调用正确的实现。为了防止资源泄露,基类的析构函数应声明为虚函数。多态的底层实现涉及对象内部的虚函数表指针,指向特定于类的虚函数表,支持动态方法解析。
274 1
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
308 1
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
600 12
|
编译器 C语言 C++
类和对象的简述(c++篇)
类和对象的简述(c++篇)
|
设计模式 安全 C++
【C++进阶】特殊类设计 && 单例模式
通过对特殊类设计和单例模式的深入探讨,我们可以更好地设计和实现复杂的C++程序。特殊类设计提高了代码的安全性和可维护性,而单例模式则确保类的唯一实例性和全局访问性。理解并掌握这些高级设计技巧,对于提升C++编程水平至关重要。
308 16