這裡寫目錄标題
- 純虛函數的描述
- 抽象類的描述
純虛函數的描述
在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中可以用來繼承多個協定.相當于繼承了多個父類,隻不過父類必須是協定.