zoukankan      html  css  js  c++  java
  • 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 }

    后续更新中....

  • 相关阅读:
    解决ORA-00257: 归档程序错误。在释放之前仅限于内部连接
    linux 监控脚本运行时间
    sqlserver中查询表字段的sql语句
    gpg无法生成密钥对的问题
    jdbc连接oracle的几种格式
    windows中使用tracert命令追踪路由信息
    MySQL编码问题探究
    Apache Storm Installation
    linux的swap相关
    awk
  • 原文地址:https://www.cnblogs.com/calence/p/5914742.html
Copyright © 2011-2022 走看看