【win32程序控制台】练习题:抽象基类与虚函数、纯虚函数的综合使用

/ * 程序的版权和版本声明部分 
  * Copyright (c) 2012, 华南师范大学软件工程专业  
  * All rights reserved. 
  * 文件名称:抽象基类与虚函数、纯虚函数的综合使用                    
  * 作    者:Hookc                              
  * 完成日期:2012  年4  月 22 日 
  * 版 本 号:1          
  * 对任务及求解方法的描述部分 
  * 输入描述:
  * 问题描述:  
  * 程序输出:
  * /

#include<iostream>
using namespace std;

//声明Shape类
class Shape
{
public:
	virtual float area()const{return 0.0;}        //虚函数 求圆面积、求圆柱的表面积是要用到同名的函数,故用虚函数声明
	virtual float volume()const{return 0.0;}
	virtual void shapeName()const=0;              //纯虚函数 功能留由派生类自己决定
};

//声明Ponit类
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;                                     //声明为protected,可以被派生类使用不能被外部类看到
};

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 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::Circle(float x,float y,float r):Point(x,y),radius(r){}

void Circle::setRadius(float r){r=radius;}

float Circle::getRadius()const{return radius;}

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

ostream & operator <<(ostream &output,const Circle &c)
{
	output<<"["<<c.x<<","<<c.y<<"],r="<<c.radius;
	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;
};

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.14159*radius*height;
}

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

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

//定义主函数
int main()
{
	Point point(3.2,4.5);
	Circle circle(2.4,1.2,5.6);
	Cylinder cylinder(3.5,6.4,5.2,10.5);
	point.shapeName();
	cout<<point<<endl;
	
	circle.shapeName();
	cout<<circle<<endl;
	
	cylinder.shapeName();
	cout<<cylinder<<endl<<endl;
	
	Shape * pt;
	
	pt=&point;
	pt->shapeName();
	cout<<"x="<<point.getX()<<",y="<<point.getY()<<"\narea="<<pt->area()<<"\nvolume="<<pt->volume()<<"\n\n";
	
	pt=&circle;
	pt->shapeName();
	cout<<"x="<<circle.getX()<<",y="<<circle.getY()<<"\narea="<<pt->area()<<"\nvolume="<<pt->volume()<<"\n\n";
	
	pt=&cylinder;
	pt->shapeName();
	cout<<"x="<<cylinder.getX()<<",y="<<cylinder.getY()<<"\narea="<<pt->area()<<"\nvolume="<<pt->volume()<<"\n\n";
	
	return 0;
}


运行结果:



小结:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值