首页 > 代码库 > C++学习基础十二——纯虚函数与抽象类

C++学习基础十二——纯虚函数与抽象类

一、C++中纯虚函数与抽象类:

1、含有一个或多个纯虚函数的类成为抽象类,注意此处是纯虚函数,而不是虚函数。

2、如果一个子类继承抽象类,则必须实现父类中的纯虚函数,否则该类也为抽象类。

3、如果一个类中含有虚函数,则必须将该类的析构函数声明为虚函数。

4、虚函数与纯虚函数的声明:

virtual void draw();//虚函数

virtual void draw() = 0;//纯虚函数

5、C++中支持两种多态性:

编译时多态:通过重载函数实现。

运行时多态:通过虚函数实现。

 

二、Java抽象函数与抽象类:

1、含有抽象方法的类成为抽象类,但抽象类不一定含有抽象方法。抽象类不能创建实例。

2、抽象方法必须使用abstract关键字修饰。

3、如果非抽象子类继承抽象类,则必须重写父类中所有的抽象方法。

 

三、C++接口:一个类中除了构造函数和析构函数外,只有纯虚函数,则该类成为接口 。

 

四、代码实现:

  1 #include <iostream>  2   3 using namespace std;  4   5 //含有一个或多个纯虚函数的类成为抽象类,注意:此处指的是纯虚函数而不是虚函数  6 //纯虚函数的定义:virtual void draw() = 0;  7 //如果继承抽象类,则必须实现父类中所有的纯虚函数,否则该子类也为抽象类  8 //如果一个类中包含虚函数,则必须将本类的析构函数声明为虚函数。   9 class Shape 10 { 11 public: 12     Shape(){ 13     } 14     virtual ~Shape(){ 15     } 16     virtual double getArea() = 0;//纯虚函数     17     virtual double getP() = 0;  18     virtual void draw() = 0; 19 }; 20  21 class Circle : public Shape 22 { 23 public: 24     Circle(double r):itsRadius(r){ 25     }     26     virtual ~Circle(){ 27          28     } 29     double getArea(){ 30         return 3.14 * itsRadius * itsRadius; 31     } 32     double getP(){ 33         return 2 * 3.14 * itsRadius; 34     }  35     void draw(){ 36         cout<<"draw Circle..."<<endl; 37     } 38 private: 39     double itsRadius; 40 } ; 41  42 class Rectangle : public Shape 43 { 44 public: 45     Rectangle(int w,int h):wid(w),hei(h){     46     } 47     virtual    ~Rectangle(){ 48     } 49     double getArea() 50     { 51         return wid * hei; 52     } 53     double getP() 54     { 55         return 2*(wid + hei); 56     } 57     void draw() 58     { 59         for(int i = 0;i < 5;i++) 60         { 61             for(int j = 0;j < 4;j++) 62             { 63                 cout<<"X  "; 64             } 65             cout<<endl; 66         } 67     } 68 private: 69     int wid; 70     int hei; 71 }; 72 int main() 73 {     74     int number; 75     bool flag = false; 76      77     Shape *shape; 78     while(flag == false) 79     { 80         cout<<"请输入数字:(1)圆形  (2)矩形  (0)退出:"; 81         cin>>number; 82         switch(number) 83         { 84             case 1: 85             shape = new Circle(10.0); 86             break; 87             case 2: 88             shape = new Rectangle(13,15); 89             break; 90             case 0: 91             flag = true; 92             break; 93         } 94          95         if(flag == false) 96         { 97             shape->draw(); 98             delete shape;     99         }100     } 101     return 0;102 }

后续更新中....

C++学习基础十二——纯虚函数与抽象类