第13周-任务4-抽象类CSolid及派生类CCube、CBall、CCylinder

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 【题目】设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义基类的指针p(CSolid *p;),利用p指针,输出正方体、球体及圆柱体对象的表面积及体积。 【参考解答】 #include "iostream"using namespace std;con

【题目】设计一个抽象类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;
	p=&x;
	s=p->SurfaceArea( );
	v=p->Volume( );
	cout<<"表面积:"<<s<<endl;
	cout<<"体积:"<<v<<endl;
	cout<<endl;
	CBall y(4.5);
	cout<<"球体半径为4.5"<<endl;
	p=&y;
	s=p->SurfaceArea( );
	v=p->Volume( );
	cout<<"表面积:"<<s<<endl;
	cout<<"体积:"<<v<<endl;
	cout<<endl;
	CCylinder z(10,20);
	cout<<"圆柱体底面半径、高分别为10, 20"<<endl;
	p=&z;
	s=p->SurfaceArea( );
	v=p->Volume( );
	cout<<"表面积:"<<s<<endl;
	cout<<"体积:"<<v<<endl;
	cout<<endl;
	system("pause");
	return 0;
}


相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
相关文章
|
4月前
|
C++
C++一分钟之-虚函数与抽象类
【6月更文挑战第21天】在C++中,虚函数与抽象类是多态的基础,增进类间耦合与灵活性。虚函数实现动态绑定,抽象类定义不可实例化的接口。关键点包括:记得使用`virtual`,避免滥用虚函数,确保派生类实现纯虚函数。抽象类不能直接实例化,派生类必须实现所有纯虚函数。通过实例代码学习和实践,能更好地掌握这些概念以优化代码设计。
41 2
|
5月前
|
C++
56纯虚函数与抽象类
56纯虚函数与抽象类
22 0
|
10月前
纯虚函数和抽象类
纯虚函数和抽象类
46 0
|
C++
C++的纯虚函数和抽象类
在C++中,可以将虚函数声明为纯虚函数,语法格式为: virtual 返回值类型 函数名 (函数参数) = 0; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。 最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。 包含纯虚函数的类称为抽象类(Abstract Class)。之所以说它抽象,是因为它无法实例化,也就是无法创建对象。原因很明显,纯虚函数没有函数体,不是完整的函数,无法调用,也无法为其分配内存空间。抽象类通常是作为基类,让派生类去实现纯虚函数。派生类必须实现纯虚函数才能被实例化。纯虚函数使用举例:
60 0
|
安全 程序员 C++
【C++要笑着学】继承 | 子类默认成员函数 | 单继承与多继承 | 钻石继承 | 虚拟继承 | 继承和组合(一)
本系列 C++ 教学博客的基础知识已经告一段落了,下面的章节我会先把面向对象三大特性讲完,然后穿插一些数据结构的教学以方便我们继续讲解 STL 的 map 和 set。对于面向对象三大特性 —— 封装、继承、多态,我们已经在之前讲解过封装了,本章将开始讲解继承,详细探讨多继承引发的钻石继承问题,并用虚继承解决钻石继承问题。阅读本章需要掌握访问限定符以及默认成员函数的知识,如果阅读过程中感到有些许生疏建议先去复习一下。
108 0
【C++要笑着学】继承 | 子类默认成员函数 | 单继承与多继承 | 钻石继承 | 虚拟继承 | 继承和组合(一)
|
Java 编译器 C++
【C++要笑着学】继承 | 子类默认成员函数 | 单继承与多继承 | 钻石继承 | 虚拟继承 | 继承和组合(二)
本系列 C++ 教学博客的基础知识已经告一段落了,下面的章节我会先把面向对象三大特性讲完,然后穿插一些数据结构的教学以方便我们继续讲解 STL 的 map 和 set。对于面向对象三大特性 —— 封装、继承、多态,我们已经在之前讲解过封装了,本章将开始讲解继承,详细探讨多继承引发的钻石继承问题,并用虚继承解决钻石继承问题。阅读本章需要掌握访问限定符以及默认成员函数的知识,如果阅读过程中感到有些许生疏建议先去复习一下。
151 0
【C++要笑着学】继承 | 子类默认成员函数 | 单继承与多继承 | 钻石继承 | 虚拟继承 | 继承和组合(二)
|
Kotlin
【Kotlin】抽象类 ( 声明 | 抽象类成员 | 抽象类继承 | 抽象方法覆盖 | 抽象方法实现 )
【Kotlin】抽象类 ( 声明 | 抽象类成员 | 抽象类继承 | 抽象方法覆盖 | 抽象方法实现 )
212 0