第13周-任务4-抽象类CSolid及派生类CCube、CBall、CCylinder
任务 13 抽象类 派生类
2023-09-11 14:15:57 时间
【题目】设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义基类的指针p(CSolid *p;),利用p指针,输出正方体、球体及圆柱体对象的表面积及体积。
【参考解答】
#include iostream
using namespace std;
【C++要笑着学】继承 | 子类默认成员函数 | 单继承与多继承 | 钻石继承 | 虚拟继承 | 继承和组合(二) 本系列 C++ 教学博客的基础知识已经告一段落了,下面的章节我会先把面向对象三大特性讲完,然后穿插一些数据结构的教学以方便我们继续讲解 STL 的 map 和 set。对于面向对象三大特性 —— 封装、继承、多态,我们已经在之前讲解过封装了,本章将开始讲解继承,详细探讨多继承引发的钻石继承问题,并用虚继承解决钻石继承问题。阅读本章需要掌握访问限定符以及默认成员函数的知识,如果阅读过程中感到有些许生疏建议先去复习一下。
【C++要笑着学】继承 | 子类默认成员函数 | 单继承与多继承 | 钻石继承 | 虚拟继承 | 继承和组合(一) 本系列 C++ 教学博客的基础知识已经告一段落了,下面的章节我会先把面向对象三大特性讲完,然后穿插一些数据结构的教学以方便我们继续讲解 STL 的 map 和 set。对于面向对象三大特性 —— 封装、继承、多态,我们已经在之前讲解过封装了,本章将开始讲解继承,详细探讨多继承引发的钻石继承问题,并用虚继承解决钻石继承问题。阅读本章需要掌握访问限定符以及默认成员函数的知识,如果阅读过程中感到有些许生疏建议先去复习一下。
C++多态纯虚函数和抽象类与多态案例(二) 纯虚函数和抽象类 在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容 因此可以将虚函数改为纯虚函数 纯虚函数语法:virtual 返回值类型 函数名 (参数列表)= 0 ; 当类中有了纯虚函数,这个类也称为==抽象类== 抽象类特点: • 无法实例化对象 • 子类必须重写抽象类中的纯虚函数,否则也属于抽象类
C++继承二之虚函数 在类方法声明如果包含了 vritual关键字那么该方法称为虚行数,继承类中相同的定义的函数可以使用virtual也可以不使用 虚函数一般用于使用相同的原型重新定义基类的函数,实现不同的功能 一般使用virtual更加明确 我们还是应用C++ Primer plu...
类虚函数 理解C++中继承层次的关键在于理解如何确定函数调用,确定函数调用遵循以下四个步骤: (1)首先确定进行函数调用的对象,引用或指针的静态类型。 (2)在该类中查找函数,如果找不到,就在直接基类中查找,如此循着类的继承链往上找,直到找到该函数或者查找完最后一个类。
【基础】理解接口、抽象类及虚函数 如果您觉得文章对您有帮助,可以【打赏】博主或点击文章右下角【推荐】一下。您的鼓励是博主坚持原创和持续写作的最大动力!
贺利坚 烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学
【题目】设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义基类的指针p(CSolid *p;),利用p指针,输出正方体、球体及圆柱体对象的表面积及体积。
【参考解答】
#include "iostream" using namespace std; const double pai=3.1415926; // 抽象立体图形基类 class CSolid public: virtual double SurfaceArea() const=0; virtual double Volume() const=0; // 立方体类 class CCube : public CSolid public: CCube(double len=0); double SurfaceArea() const; // 求表面积 double Volume() const; // 求体积 private: double length; // 立方体类构造函数 CCube::CCube(double len) length=len; // 求立方体表面积 double CCube::SurfaceArea() const double c; c=6*length*length; return c; // 求立方体体积 double CCube::Volume() const double c; c=length*length*length; return c; // 球体类 class CBall : public CSolid private: double radius; // 圆周率 public: CBall(double r=0); double SurfaceArea() const; // 求表面积 double Volume() const; // 求体积; // 球体类构造函数 CBall::CBall(double r) radius=r; // 求球体表面积 double CBall::SurfaceArea() const double c; c=4*pai*radius*radius; return c; // 求球体体积 double CBall::Volume() const double c; c=pai*radius*radius*radius*4/3; return c; // 圆柱体类 class CCylinder : public CSolid private: double radius; double height; public: CCylinder(double r=0,double high=0); double SurfaceArea() const; // 求表面积 double Volume() const; // 求体积 // 圆柱体类构造函数 CCylinder::CCylinder(double r,double high) radius=r; height=high; // 求圆柱体表面积 double CCylinder::SurfaceArea() const double c; c=pai*radius*radius+2*pai*radius*height; return c; // 求圆柱体体积 double CCylinder::Volume() const double c; c=pai*radius*radius*height; return c; int main( ) CSolid *p; double s,v; CCube x(30); cout "立方体边长为30" endl; s=p- SurfaceArea( ); v=p- Volume( ); cout "表面积:" s endl; cout "体积:" v endl; cout endl; CBall y(4.5); cout "球体半径为4.5" endl; s=p- SurfaceArea( ); v=p- Volume( ); cout "表面积:" s endl; cout "体积:" v endl; cout endl; CCylinder z(10,20); cout "圆柱体底面半径、高分别为10, 20" endl; s=p- SurfaceArea( ); v=p- Volume( ); cout "表面积:" s endl; cout "体积:" v endl; cout endl; system("pause"); return 0;
【C++要笑着学】继承 | 子类默认成员函数 | 单继承与多继承 | 钻石继承 | 虚拟继承 | 继承和组合(二) 本系列 C++ 教学博客的基础知识已经告一段落了,下面的章节我会先把面向对象三大特性讲完,然后穿插一些数据结构的教学以方便我们继续讲解 STL 的 map 和 set。对于面向对象三大特性 —— 封装、继承、多态,我们已经在之前讲解过封装了,本章将开始讲解继承,详细探讨多继承引发的钻石继承问题,并用虚继承解决钻石继承问题。阅读本章需要掌握访问限定符以及默认成员函数的知识,如果阅读过程中感到有些许生疏建议先去复习一下。
【C++要笑着学】继承 | 子类默认成员函数 | 单继承与多继承 | 钻石继承 | 虚拟继承 | 继承和组合(一) 本系列 C++ 教学博客的基础知识已经告一段落了,下面的章节我会先把面向对象三大特性讲完,然后穿插一些数据结构的教学以方便我们继续讲解 STL 的 map 和 set。对于面向对象三大特性 —— 封装、继承、多态,我们已经在之前讲解过封装了,本章将开始讲解继承,详细探讨多继承引发的钻石继承问题,并用虚继承解决钻石继承问题。阅读本章需要掌握访问限定符以及默认成员函数的知识,如果阅读过程中感到有些许生疏建议先去复习一下。
C++多态纯虚函数和抽象类与多态案例(二) 纯虚函数和抽象类 在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容 因此可以将虚函数改为纯虚函数 纯虚函数语法:virtual 返回值类型 函数名 (参数列表)= 0 ; 当类中有了纯虚函数,这个类也称为==抽象类== 抽象类特点: • 无法实例化对象 • 子类必须重写抽象类中的纯虚函数,否则也属于抽象类
C++继承二之虚函数 在类方法声明如果包含了 vritual关键字那么该方法称为虚行数,继承类中相同的定义的函数可以使用virtual也可以不使用 虚函数一般用于使用相同的原型重新定义基类的函数,实现不同的功能 一般使用virtual更加明确 我们还是应用C++ Primer plu...
类虚函数 理解C++中继承层次的关键在于理解如何确定函数调用,确定函数调用遵循以下四个步骤: (1)首先确定进行函数调用的对象,引用或指针的静态类型。 (2)在该类中查找函数,如果找不到,就在直接基类中查找,如此循着类的继承链往上找,直到找到该函数或者查找完最后一个类。
【基础】理解接口、抽象类及虚函数 如果您觉得文章对您有帮助,可以【打赏】博主或点击文章右下角【推荐】一下。您的鼓励是博主坚持原创和持续写作的最大动力!
贺利坚 烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学
相关文章
- 李宏毅课程-人类语言处理2-[视频]NLP任务总览(上)
- Laravel 计划任务(任务调度)的使用
- 定时任务的使用-crond
- 机器学习笔记之条件随机场(六)学习任务介绍(Learning)
- 第10周-任务2-CEmployee类继承CPerson类
- 第8周-任务2-实现Time类中的运算符重载
- 线程同步工具(六)控制并发阶段性任务的改变
- Spark(五)Spark任务提交方式和执行流程
- 微软发布BioGPT源码免费公开使用,迈向生命科学的 ChatGPT,在不同的生物医学 NLP 任务中实现了 SOTA( 教程含项目源码)
- SwiftUI macOS 轻松搭建Todo任务管理类App界面(教程含源码)
- FreeRTOS ------ 栈、堆、任务栈
- Ubuntu cron定时任务没有运行的调试
- FreeFileSync + Windows任务计划程序 实现自动备份功能
- Linux定时任务命令crontab