10.3修改

//扩展程序:创建一个三角形类
//修改create_object函数,使得程序支持三角形的创建
//和求面积、打印等操作
#include <iostream>
using namespace std;

class Shape {
public:
	virtual double getArea() const = 0;
	virtual void print() const = 0;
	virtual ~Shape(){}
};

class Circle : public Shape {
public:
	Circle(int = 0, int = 0, double = 0.0);
	virtual double getArea() const;   		// 返回面积
	virtual void print() const;  		// 输出Circle 类对象t
private:
	int x, y;        				// 圆心座标
	double radius;  				// 圆半径
}; 	// 派生类Circle定义结束


class Rectangle : public Shape {
public:
	Rectangle(int = 0, int = 0);  		// 构造函数
	virtual double getArea() const;   		// 返回面积
	void print() const;  			// 输出Rectangle类对象
protected:
	int a, b;       				// 矩形的长和宽
}; 				// 派生类
double Shape::getArea() const
{
	cout << "基类的getArea函数,面积是 ";
	return 0.0;
}  						// Shape类getArea函数的定义


class Sanjiao : public Shape {
public:
	Sanjiao(double cValue, double dValue);
	virtual double getArea() const;   		// 返回面积
	virtual void print() const;  		// 输出Circle 类对象t
private:
	double c, d;        				// 底,高

};


//double Shape::getArea() const
//{
//	cout << "基类的getArea函数,面积是 ";
//	return 0.0;
//}
void Shape::print() const
{
	cout << "Base class Object" << endl;
}						//Shape类print函数定义


Circle::Circle(int xValue, int yValue, double radiusValue)
{
	x = xValue;  y = yValue;
	radius = radiusValue;
} 						// Circle类构造函数
double Circle::getArea() const
{
	cout << "Circle类的getArea函数,面积是 ";
	return 3.14159 * radius * radius;
} 						// Circle类getArea函数定义
void Circle::print() const
{
	cout << "center is ";
	cout << "x=" << x << "   y=" << y;
	cout << "; radius is " << radius << endl;
} 						// Circle类print函数定义


Rectangle::Rectangle(int aValue, int bValue)
{
	a = aValue;  b = bValue;
} 						// Rectangle类构造函数
double Rectangle::getArea() const
{
	cout << "Rectangle类的getArea函数,面积是 ";
	return a * b;
} 					      // Rectangle类getArea函数定义
void Rectangle::print() const
{
	cout << "hight is " << a;
	cout << "width is" << b << endl;
}


Sanjiao::Sanjiao(double cValue, double dValue)
{
	c = cValue;  d = dValue;
} 						                          // Rectangle类构造函数
double Sanjiao::getArea() const
{
	cout << "Sanjiao类的getArea函数,面积是 ";
	return  0.5*c * d;
} 					      // Rectangle类getArea函数定义
void Sanjiao::print() const
{
	cout << "hight is " << c;
	cout << "bottom is " << d << endl;

}


class Cube : public Rectangle {		//派生类Cube的定义
public:
	Cube(int x = 0, int y = 0, int z = 0) :Rectangle(x, y), c(z){};
	double getArea() const;
	void print() const;
private:
	int c;
};
double Cube::getArea() const
{
	return a*b*c;
}

void Cube::print() const
{
	cout << "Cube:h=" << c << ",length=" << a
		<< ",width=" << b << ",Area=" << a*b*c << endl;
}

void creat_object(Shape **ptr)
{
	char type;
	*ptr = NULL;			//空指针
	do{
		cout << "创建对象。请选择:";
		cout << "c:Circle类对象;r:Rectangle类对象;u:Cube类对象;s:Sanjiao类对象" << endl;
		cin >> type;
		switch (type)
		{
		case 'c':			//创建Ciecle类对象
		{int xx, yy;
		double rr;
		cout << "请输入圆心的座标和圆的半径:";
		cin >> xx >> yy >> rr;
		*ptr = new Circle(xx, yy, rr);
		break;
		}
		case 'r':			//创建Rectangle类对象 
		{
			int aa, bb;		
			cout << "请输入矩形的长和宽:";		
			cin >> aa >> bb;			
			*ptr = new Rectangle(aa, bb);			
		}	
			break;
		case 'u':			//创建Cube类对象 
		{	
			int aa, bb, cc;		
			cout << "请输入立方体的长、宽、高:";		
			cin >> aa >> bb >> cc;		
			*ptr = new Cube(aa, bb, cc);	
		}
			break;
		case 's':			//创建Sanjiao类对象 		
		{
			double cc, dd;	
			cout << "请输入三角形的底、高:";		
			cin >> cc >> dd;		
			*ptr = new Sanjiao(cc, dd);
		}	
			break;
		default:cout << "类型错误,请重新选择\n";
		}
	} while (*ptr == NULL);
}

void display_area(Shape *ptr)
{
	cout << "显示所创建对象的面积,调用的是" << endl;
	cout << ptr->getArea() << endl;
}

void delete_object(Shape *ptr)
{
	delete(ptr);
}


int main()
{
	Shape *shape_ptr;
	creat_object(&shape_ptr);
	display_area(shape_ptr);
	delete_object(shape_ptr);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值