C++点-圆-圆柱体的层次结构

  这个实例算是结合了c++中大部分的内容,程序并不难,得花时间消化。自己也改了好久bug。程序调的过程中出现了bug,友元类那里程序一个报错,搜了一下网上,说是编译器的问题。vc ++ 6.0 绿色版运行不了 会报错 建议用正版的vc。图片就不贴了 程序贴上。


# include <iostream>

using namespace std;

//声明抽象类
class Shape
{
public:
	virtual float area() const{return 0.0;}		//虚函数
	virtual float volume() const{return 0.0;}	//虚函数
	virtual void shapeName() const = 0;			//纯虚函数
};

//声明Point基类
class Point:public Shape
{
public:
	Point(float= 0,float = 0);
	void setPoint(float,float);
	float getX() const {return x;}
	float getY() const {return y;}
	virtual void shapeName() const {cout<<"Point:";}
	friend ostream &operator<<(ostream &,const Point &);
protected:
	float x,y;
};

//定义Point类成员函数
Point::Point(float a,float b)					//构造函数
{
	x = a;
	y = b;
}

void Point::setPoint(float a,float b)
{
	x = a;
	y = b;
}

ostream &operator<<(ostream &output,const Point &p)
{
	output<<"["<<p.x<<","<<p.y<<"]";
	return output;
}

//声明Circle基类
class Circle:public Point
{
public:
	Circle(float x= 0,float y= 0,float r= 0);
	void setRad(float);
	float getRad() const;
	virtual float area() const;
	virtual void shapeName() const {cout<<"Circle:";}		//对虚函数进行再定义
	friend ostream &operator << (ostream &,const Circle &);
protected:
	float rad;
};

//定义Circle类成员函数
Circle::Circle(float x,float y,float r):Point(x,y),rad(r){}

void Circle::setRad(float r){rad=r;}

float Circle::getRad()const {return rad;}

float Circle::area() const {return 3.14159*rad*rad;}

ostream &operator << (ostream &output,const Circle &c)
{
	output<<"["<<c.x<<","<<c.y<<"],r ="<<c.rad;
	return output;
}

//声明Cylinder基类
class Cylinder:public Circle
{
public:
	Cylinder(float x= 0,float y= 0,float r= 0,float h= 0);
	void setHeight(float);
	virtual float area() const;
	virtual float volume() const;
	virtual void shapeName() const {cout<<"Cylinder:";}		//对虚函数进行再定义
	friend ostream &operator << (ostream &,const Cylinder &);
protected:
	float height;
};

//定义Cylinde类成员函数
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::area()const 
{
	return 2*Circle::area() + 2*3.14*rad*height;
}

float Cylinder::volume()const
{
	return Circle::area()*height;
}

ostream &operator << (ostream &output,const Cylinder &cy)
{
	output<<"["<<cy.x<<","<<cy.y<<"],r ="<<cy.rad<<",h ="<<cy.height;
	return output;
}

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;

	Shape *pt;								//定义基类指针

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

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

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


现在自己也回顾了一遍自己学过的C++,总体还行吧。还是那一句思想很重要。今天脑海里一直有这样一句话“一件事 要么就别做 要做就做到最好”------Dash







  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值