多文件程序的编写

多文件程序包含:
头文件.h
源文件.cpp
主函数.cpp


//声明抽象基类Shape
//Shape.h
class Shape
{
public:
	virtual float area() const { return 0.0; }			//虚函数
	virtual float volume() const { return 0.0; }		//虚函数
	virtual void shapeName() const=0;					//纯虚函数
};
//声明类Point
//Point.h
class Point:public Shape						//Point是Shape的公用派生类
{
public:
	Point( float x=0,float y=0);								//构造函数
	void setPoint(float,float);								//设置坐标值
	float getX() const { return x; }							//读x的坐标
	float getY() const { return y; }							//读y的坐标	
	virtual void shapeName() const { cout<<"Point:"; }			//对虚函数进行在定义
	friend ostream &operator <<(ostream&,const Point&);
protected:
	float x,y;										//受保护成员
};
//声明派生类Circle
//Circle.h
class Circle:public Point					//circle是Point类的公用派生类
{
public:
	Circle(float x=0,float y=0,float r=0);  //构造函数
	void setRadius(float);					//设置半径值
	float getRadius() const;				//读取半径值
	virtual float area() const;				//计算圆面积
	virtual void shapeName() const { cout<<"Circle:"; }
	friend ostream &operator <<(ostream &,const Circle &);//重载运算符“<<”
protected:
	float radius;
};
//声明Circle的派生类Cylinder
//Cylinder.h

class Cylinder:public Circle
{
public:
	Cylinder( float x=0,float y=0,float r=0,float h=0);	 //构造函数
	void setHeight(float);								//设置圆柱高
	float getHeight() const;							//读取圆柱高
	virtual float area() const;							//计算圆表面积
	virtual float volume() const;						//计算圆柱体积
	virtual void shapeName() const { cout<<"Cylinder:"; }
	friend ostream& operator <<(ostream&,const Cylinder &);
protected:
	float height;										//圆柱高
};
//Point.cpp文件

#include<iostream>
using namespace std;
#include"Shape.h"							//需要包含的头文件
#include"Point.h"

//下面定义Point类的成员函数
Point::Point(float a,float b)				//对x,y初始化
{ x=a; y=b; }					

void Point::setPoint(float a,float b)		//为x,y赋新值
{ x=a; y=b; }							
//重载运算符“<<”,使之能输出点的坐标
ostream & operator <<(ostream &output,const Point &p)
{ output<<"["<<p.x<<","<<p.y<<"]"<<endl;
	return output;
}

//circle.cpp文件

#include<iostream>
using namespace std;
#include"Shape.h"					//需要包含的头文件
#include"Point.h"
#include"Circle.h"

//定义构造函数,对圆心坐标和半径初始化
Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}

//设置半径值
void Circle::setRadius(float r)
{ radius=r; }

//读取半径值
float Circle::getRadius() const { return radius; }

//计算圆面积
float Circle::area() const
{ return 3.14159 * radius * radius; }

//重载运算符“<<”,使之按规定的形式输出圆的信息
ostream &operator <<( ostream &output,const Circle &c)
{
	output<<"Center=["<<c.x<<","<<c.y<<"],r="<<c.radius<<",area="<<c.area()
		<<endl;
	return output;
}


 
//Cylinder.cpp文件

#include<iostream>
using namespace std;
#include"Shape.h"				//需要包含的头文件
#include"Point.h"
#include"Circle.h"
#include"Cylinder.h"

//构造函数
Cylinder::Cylinder(float a,float b,float r,float h):Circle(a,b,r),height(h){}

//设置圆柱高
void Cylinder::setHeight(float h){ height=h;}

//读取圆柱高
float Cylinder::getHeight() const{ return height; }

//计算圆柱表面积
float Cylinder::area() const
{ return 2 * Circle::area()+2 * 3.14159 * radius * height; }

//计算圆柱体积
float Cylinder::volume() const
{ return Circle::area() * height; }

//重载运算符“<<”,使之能按规定形式输出圆柱的信息
ostream &operator <<( ostream &output,const Cylinder& cy)
{
	output<<"Center=["<<cy.x<<","<<cy.y<<"],r="<<cy.radius<<",h="<<cy.height
		<<"\narea="<<cy.area()<<",volume="<<cy.volume()<<endl;
	return output;
}

//主函数文件
//main.cpp

#include<iostream>
using namespace std;
#include"Shape.h"
#include"Point.h"
#include"Circle.h"
#include"Cylinder.h"

int main()
{
	Point point(3.2,4.5);			//建立Point类对象point		
	Circle circle(2.4,1.2,5.6);		//建立Circle类对象circle
	Cylinder cylinder(3.5,6.4,5.2,10.5);//建立Cylinder类对象cylinder
	point.shapeName();					//静态关联
	cout<<point<<endl;

	circle.shapeName();					//静态关联
	cout<<circle<<endl;

	cylinder.shapeName();				//静态关联
	cout<<cylinder<<endl<<endl;

	Shape *pt;							//定义基类指针
    pt=&point;							//指针指向Point类对象
	pt->shapeName();					//动态关联
	cout<<"x="<<point.getX();	
	cout<<",y="<<point.getY()<<endl;
	cout<<"area="<<pt->area()<<endl;
	cout<<"volume="<<pt->volume()<<endl;
	cout<<endl;
	

	pt=&circle;							//指针指向Circle类对象
	pt->shapeName();					//动态关联
	cout<<"x="<<point.getX();
	cout<<",y="<<point.getY()<<endl;
	cout<<"area="<<pt->area()<<endl;
	cout<<"volume="<<pt->volume()<<endl;
	cout<<endl;

	pt=&cylinder;						//指针指向Cylinder类对象
	pt->shapeName();					//动态关联
	cout<<"x="<<point.getX();
	cout<<",y="<<point.getY()<<endl;
	cout<<"area="<<pt->area()<<endl;
	cout<<"volume="<<pt->volume()<<endl;
	cout<<endl;
	
	system("pause");
	return 0;
}

/*说明:在主函数中调用有关函数并输出结果。
先定义Point类对象point,Circle类对象circle和Cylinder类对象cylinder。
然后分别通过对象名point,circle和cylinder调用了shapeName函数,这是属于静态关联,
在编译阶段就能确定应调用哪一个类的shapeName函数。同时用重载的运算符“<<”来输出
各对象的信息,可以验证对象初始化是否正确。
  再定义一个指向基类shape对象的指针变量pt,使它先后指向3个派生类对象point,circle,cylinder
  然后通过指针调用各函数,如pt->shapeName(),pt->area(),pt->volume().
  这时通过动态关联分别确定调用哪个函数。分别输出不同对象信息。*/

 
 

                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值