C++语言基础 例程 抽象类
来源:互联网 发布:php网站框架 编辑:程序博客网 时间:2024/06/03 06:55
贺老师的教学链接 本课讲解
实例:顶层的Shape作为抽象类
#include <iostream>using namespace std;//声明抽象基类Shapeclass 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//Point是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 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::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<<"["<<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::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;}//main函数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( )<<",y="<<point.getY( )<<"\narea="<<pt->area( ) <<"\nvolume="<<pt->volume()<<"\n\n"; pt=&circle; //指针指向Circle类对象 pt->shapeName( ); //动态关联 cout<<"x="<<circle.getX( )<<",y="<<circle.getY( )<<"\narea="<<pt->area( ) <<"\nvolume="<<pt->volume( )<<"\n\n"; pt=&cylinder; //指针指向Cylinder类对象 pt->shapeName( ); //动态关联 cout<<"x="<<cylinder.getX( )<<",y="<<cylinder.getY( )<<"\narea="<<pt->area( ) <<"\nvolume="<<pt->volume( )<<"\n\n"; return 0;}
0 0
- C++语言基础 例程 抽象类
- C语言基础及例程
- C++语言基础 例程 类模板
- C++语言基础 例程 字符串类
- C#:超基础 抽象类
- c语言 连接 mysql 例程
- C++语言基础 例程 类的成员函数
- C++语言基础 例程 Time类的设计
- C++语言基础 例程 案例:Time类的设计
- C++语言基础 例程 案例:MyVector类的设计
- C++语言基础 例程 派生类的声明与构成
- C++语言基础 例程 派生类成员的访问属性
- Java语言基础:抽象类和接口
- Java语言基础之抽象类
- C++语言基础 例程 初见对象
- C++语言基础 例程 构造函数
- C++语言基础 例程 默认构造函数
- C++语言基础 例程 对象指针
- 系统相册标题显示如何改成中文
- APM_01
- C++语言基础 例程 虚析构函数
- C++语言基础 例程 纯虚函数
- C++语言基础 例程 虚函数
- C++语言基础 例程 抽象类
- Linux下的进程间通信-详解
- css sprint使用方法
- C++语言基础 例程 设计模式简介
- Wordpress for Sae引发的一系列
- Android BroadCastReceiver 广播接收者使用
- 高精度加法
- cocos2d-x 3.3 之卡牌设计 NO.3 卡牌移动
- C++异常对象三种方式传递的综合比较