• 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 }

    后续更新中....

  • 相关阅读:
    eclipse对项目Working Sets整理分类
    word中visio只显示边框,不显示内容解决
    使用WebStorm运行vue项目
    如何提高你的学习速度-超链接式学习法
    SQL中的join连接查询
    TCP的三次握手
    Tomcat 实现热部署
    Linux下软件设成系统服务运行
    Redis服务器搭建
    nginx.conf完整配置实例
  • 原文地址:https://www.cnblogs.com/calence/p/5914742.html
Copyright © 2020-2023  润新知