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

【题目】设计一个抽象类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;
}
时间: 2024-10-03 04:59:40

第13周-任务4-抽象类CSolid及派生类CCube、CBall、CCylinder的相关文章

C++第13周项目4 - 多重继承出日期时间类

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8953304 [项目4]日期时间类 定义一个日期类Date,数据成员包括年.月.日,SetDate(int y,int m,int d)和PrintDate()函数分别用于设置日期和显示日期:再定义一个时间类Time,数据成员包括时.分.秒,SetTime(in

C02-程序设计基础提高班(C++)第13周上机任务-多态与虚函数

第13周:阅读教材第12章(p395-416),主要内容是多态性,完成第13周上机任务 (回到C02-程序设计基础提高班(C++)学习安排) [任务1]下面给出了基类Animal和main()函数.(1)根据main()函数给出的注释提示,设计出相关的各个类.(2)显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的.改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除.(3)每一个Animal的派生类

2015级C++第13周实践项目 多态性和实现

[项目1-分数类中的运算符重载] 参考解答 (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简).比较(6种关系)的运算. class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 }; //重载函数的实现及用于测试的main()函数 (2)在(1)的基础上,实现分数类中的对象和整型数的四则运算.分数类中的对象可以和整型数进行四则运算,且运算符合交换律.例如

第13周-任务2-动物怎么叫?——好玩中理解抽象类

[题目]下面给出了基类Animal和main()函数. (任务2.1)根据main()函数给出的注释提示,设计出相关的各个类. (任务2.2)显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的.改造程序,使Animal设计为抽象类,这时main()函数中p =newAnimal();将出错,将此行删除. (任务2.3)每一个Animal的派生类都有一个"名字"数据成员,改造上面的程序,将这一数据成员作为抽象类Animal数据成员被各派生类使用. cl

C++程序设计课程师生互动(2012年春第13周)

[本周感言--一点牢骚] 一些同学的状态还没有恢复.实际上,状态好的仍然保持,状态差的有持续下滑的趋势.结合期中测验的结果,如果有些同学还不改善状态,我真不看好了.近期的时间比春假前要松一些了,但完成的任务却少了.一直处于"赶上来"阶段的同学,每周的任务不去全部完成,跟不住,谈何赶上来.不少同学已经有了属于自己的电脑,是否用于学习,自己知道.反倒是,编程很疯狂的几位,依赖的仅是公共机房. 某天,下课后,几位同学站在路口,商量去哪.有一位提议:"去烟大市场吧." 我知

1年期央票利率连续13周维稳

中国人民银行9月7日公告显示,央行7日上午完成发行560亿元1 年期央票,参考收益率连续第13周维持于2.0929%水平. 央行今日仍未进行28天正回购操作,而1年期央票的发行规模也创下4月底以来的新高. 本周公开市场到期资金达2740亿元,为9月乃至整个三季度最大单周到期资金量,因此,本周1年期央票的放量发行也在市场预料之中.而除非本周3年期央票出现放量,否则本周将仍延续上周的净投放格局. 上周在完成700亿元净投放之后,整个8月公开市场以净回笼1090亿元资金收官,而9月,公开市场到期资金量

第13周-任务3-抽象基类Shape及派生类Circle、Rectangle和Triangle

[题目]写一个程序,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形).Rectangle(矩形).Triangle(三角形).用如下的mian()函数,求出定义的几个几何体的面积和. int main() { Circle c1(12.6),c2(4.9); //建立Circle类对象c1,c2,参数为圆半径 Rectangle r1(4.5,8.4),r2(5.0,2.5); //建立Rectangle类对象r1,r2,参数为矩形长.宽 Triangle t1(4.5,8.4

PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述

复制代码 代码如下: <?php /* 边学边做的,为方便自己翻阅而发布,更为得到高人指点而发布,欢迎高手指点...... [提示]本例通过测试无误 [情景设计] 模拟计算机主板IDE接口,比如:主板可以存取的储存器常常有光驱.硬盘.闪存等等, 为了方便,有必要对这些不同的储存器设定同一的接口. 本例还假设一种前所未有的.存取方式与众不同的外星储存器也要加到主板上进行存取, 于是需要采用耦合的设计模式. [本例主要讲述] 1.通过接口.抽象类.一般类继承三种方式达到所谓的"接口"

C#抽象类、密封类及类成员

1.抽象类和类成员 使用 abstract 关键字可以创建必须在派生类中实现的不完整的类和类成员. 例如: public abstract class A { // Class members here. } 抽象类不能实例化.抽象类的用途是提供多个派生类可共享的基类的公共定义.例如,类库可以定义一个作为其多个函数的参数的抽象类,并要求程序员使用该库通过创建派生类来提供自己的类实现. 抽象类也可以定义抽象方法.方法是将关键字 abstract 添加到方法的返回类型的前面. 例如: public