C++抽象类

来源:互联网 发布:mac管理桌面图标 编辑:程序博客网 时间:2024/06/05 21:54

1、凡是包含纯虚函数的类都是抽象类。因为纯虚函数是不能被调用的,包含纯虚函数的类是无法建立对象的。

2、如果在派生类中没有对所有纯虚函数进行定义,则此派生类仍然是抽象类,不能用来定义对象。

3、可以定义指向抽象类的指针。

下面是代码

#include<iostream>using namespace std;#define PI 3.1415926/****************************抽象基类**********************************/class Shape{public :    virtual float area(){return 0;};//虚函数--面积    virtual float volume(){return 0;};//虚函数--体积    virtual void shapeName()=0;//纯虚函数    virtual ~Shape(){};//虚析构函数};/*********************************Point************************************/class Point:public Shape{protected:    float x,y;public:    Point(float x=0,float y=0):x(x),y(y){}//构造函数    virtual ~Point(){ cout<<"Point destory"<<endl;}//虚析构函数    virtual float area(){return 0;}//虚函数--面积    virtual float volume(){return 0;};//虚函数--体积    virtual void shapeName();};void Point::shapeName()    {    cout<<"This is a Point"<<endl;    }/***********************************Circle**********************************/class Circle:public Point{protected:    float r;public:    Circle(float x=0,float y=0,float r=0):Point(x,y),r(r){}//构造函数    virtual ~Circle(){cout<<"Circle destory"<<endl;}//虚析构函数    virtual float area(){return PI*r*r;}//虚函数--面积    virtual float volume(){return 0;}//虚函数--体积    virtual void shapeName();};void Circle::shapeName()    {    cout<<"This is a Circle"<<endl;    }/***********************************Cylinder**********************************/class Cylinder:public Circle{protected:    float h;public:    Cylinder(float x=0,float y=0,float r=0,float h=0):Circle(x,y,r),h(h){}//构造函数    virtual ~Cylinder(){cout<<"Cylinder destory"<<endl;}//虚析构函数    virtual float area(){return PI*r*r*2+2*PI*r*h;}//虚函数--面积    virtual float volume(){return PI*r*r*h;}//虚函数--体积    virtual void shapeName();};void Cylinder::shapeName()    {    cout<<"This is a Cyliner"<<endl;    }/*****************************************************************************/int main(){Shape *p=new Point;p->shapeName();delete p;cout<<endl;p=new Circle(1.2,2,3);p->shapeName();cout<<"area   : "<<p->area()<<endl;delete p;cout<<endl;p=new Cylinder(1.2,2,3,10);p->shapeName();cout<<"area   : "<<p->area()<<endl;cout<<"volume : "<<p->volume()<<endl;delete p;cout<<endl;return 0;}

下面是运行结果
这里写图片描述

原创粉丝点击