多文件程序的编写

来源:互联网 发布:仿淘宝商城源码java 编辑:程序博客网 时间:2024/05/16 14:38
多文件程序包含:头文件.h源文件.cpp主函数.cpp//声明抽象基类Shape//Shape.hclass Shape{public:virtual float area() const { return 0.0; }//虚函数virtual float volume() const { return 0.0; }//虚函数virtual void shapeName() const=0;//纯虚函数};
//声明类Point//Point.hclass 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.hclass 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.hclass 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类对象pointCircle circle(2.4,1.2,5.6);//建立Circle类对象circleCylinder cylinder(3.5,6.4,5.2,10.5);//建立Cylinder类对象cylinderpoint.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().  这时通过动态关联分别确定调用哪个函数。分别输出不同对象信息。*/

	
				
		
原创粉丝点击