zl程序教程

您现在的位置是:首页 >  其它

当前栏目

第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;

【题目】设计一个抽象类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学子的正能量》,帮助处于迷茫中的大学