天天看點

C++ 抽象類 和純虛函數詳解純虛函數的描述抽象類的描述

這裡寫目錄标題

  • 純虛函數的描述
  • 抽象類的描述

純虛函數的描述

在class或者struct中,的函數,隻定義了函數類型,但是沒有函數體,并且給函數初始化 = 0 如下: speak()和run()就是2個純虛函數

class Person{
public:
    virtual void speak() = 0;//純虛函數,隻定義了函數類型,沒有函數體.相當于oc和swift中的協定裡定義的方法
    virtual void run() = 0;
};

           

抽象類的描述

C++相當于oc和swift中的協定,不能直接建立類,C++中的抽象類,是隻要包含一個純虛函數,就是抽象類

上面代碼 Person類就是抽象類,因為裡面包含了純虛函數.下面代碼因為Student沒有把父類中的所有純虛函數都實作,是以依然是抽象類,不能用來建立對象

class Student: public Person{
public:
    void speak() {
        cout<< "Student speak()"<<endl;
    }
    //student 沒有完全實作純虛函數,依然是抽象類 ,不能建立對象

};

           

下面代碼,Worker實作了所有父類中的純虛函數,是以不是抽象類,可以被初始化.

class Worker: public Person{
public:
    void speak() {
        cout<< "Worker speak()"<<endl;
    }
    //student 沒有完全實作純虛函數,依然是抽象類 ,不能建立對象
    void run() {
        cout<< "Worker run()"<<endl;
    }
};
           
Person s = Person();//報錯,抽象類不能建立對象
Student s = Student();//報錯 1student 沒有完全實作純虛函數,依然是抽象類 ,不能建立對象
Worker w = Worker();//實作了所有的純虛函數,不再是抽象類,可以建立對象
           

關于抽象類的作用,跟oc和swift的協定一樣,隻是聲明方法用,在oc和swift中可以用來繼承多個協定.相當于繼承了多個父類,隻不過父類必須是協定.

繼續閱讀