C++实践参考——立体类族共有的抽象类

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 返回:贺老师课程教学链接  项目要求【项目-立体类族共有的抽象类】    设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。[参考

返回:贺老师课程教学链接  项目要求


【项目-立体类族共有的抽象类】
    设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(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=2*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;
	return 0;
}


相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
相关文章
|
6月前
|
C++
C++一分钟之-虚函数与抽象类
【6月更文挑战第21天】在C++中,虚函数与抽象类是多态的基础,增进类间耦合与灵活性。虚函数实现动态绑定,抽象类定义不可实例化的接口。关键点包括:记得使用`virtual`,避免滥用虚函数,确保派生类实现纯虚函数。抽象类不能直接实例化,派生类必须实现所有纯虚函数。通过实例代码学习和实践,能更好地掌握这些概念以优化代码设计。
57 2
|
2月前
|
存储 C++
【C++篇】C++类和对象实践篇——从零带你实现日期类的超详细指南
【C++篇】C++类和对象实践篇——从零带你实现日期类的超详细指南
38 2
|
7月前
|
C++
C++代码的可读性与可维护性:技术探讨与实践
C++代码的可读性与可维护性:技术探讨与实践
130 1
|
2月前
|
存储 编译器 C语言
C++类与对象深度解析(一):从抽象到实践的全面入门指南
C++类与对象深度解析(一):从抽象到实践的全面入门指南
56 8
|
3月前
|
C++
c++继承层次结构实践
这篇文章通过多个示例代码,讲解了C++中继承层次结构的实践应用,包括多态、抽象类引用、基类调用派生类函数,以及基类指针引用派生类对象的情况,并提供了相关的参考链接。
|
6月前
|
关系型数据库 MySQL 测试技术
技术分享:深入C++时间操作函数的应用与实践
技术分享:深入C++时间操作函数的应用与实践
62 1
|
6月前
|
C++
C++解决线性代数矩阵转置 小实践
【6月更文挑战第3天】C++解决线性代数矩阵转置
96 2
|
6月前
|
存储 算法 安全
用C++打造极致高效的框架:技术探索与实践
本文探讨了如何使用C++构建高性能框架。C++凭借其高性能、灵活性和跨平台性成为框架开发的理想选择。关键技术和实践包括:内存管理优化(如智能指针和自定义内存池)、并发编程(利用C++的并发工具)、模板与泛型编程以提高代码复用性,以及性能分析和优化。在实践中,应注意代码简洁性、遵循最佳实践、错误处理和充分测试。随着技术发展,不断提升对框架性能的要求,持续学习是提升C++框架开发能力的关键。
132 1
|
6月前
|
C++
C++程序设计实践一上(题目来自杭州电子科技大学ACM)
C++程序设计实践一上(题目来自杭州电子科技大学ACM)
44 2
|
6月前
|
C++
C++程序设计实践一下(题目来自杭州电子科技大学ACM)
C++程序设计实践一下(题目来自杭州电子科技大学ACM)
49 1