C++快速入門--12--抽象類和介面模擬
初探抽象類
什麼是抽象類?含有純虛擬函式的類為抽象類,什麼是純虛擬函式?即virtual void fun() = 0;這樣的函式即為純虛擬函式。
class Figer{
public:
virtual int getArea() = 0;
};
class Circle:public Firger{
public:
Circle(int a,int b){
this->a = a;
this->b = b;
}
virtual int getArea(){
return 3.14 * this->a * this->b;
}
private:
int a,b;
};
class Square:public Figer{
public:
Square(int a,int b){
this->a = a;
this->b = b;
}
virtual int getArea(){
return a*b;
}
private:
int a,b;
};
void printArea(Figer & figer){
cout<<getArea()<<endl;
}
int main(){
Circle c(1,2);
Square s(1,2);
printArea(c);
printArea(s);
return 0;
}
有了抽象類之後,我們就可以面向介面程式設計,我們可以先定義一套抽象類别範本,然後再去實現它。實現每個模組的不需要關係別人是怎麼實現的,因為利用C++的多型性,我們只需要通過模板類指向子類物件即可
例如上面的printArea()方法,Square類和Circle類可以是兩個不同的人寫的,他們不需要關係對方是怎麼實現的,都只需要將引數傳遞到printArea即可完。
使用抽象類模擬java介面
在C++你不能直接定義一個介面,但是你可以通過抽象類模擬介面。
class Interface1 {
public:
virtual int add(int a, int b) = 0;
virtual void print() = 0;
};
class Interface2 {
public:
virtual int mult(int a,int b) = 0;
virtual void print() = 0;
};
class Parent {
protected:
int a;
Parent(int a) {
this->a = a;
}
virtual int getA() {
return this->a;
}
};
class Child :public Parent,public Interface1,public Interface2{
public:
Child(int a):Parent(a) {
this->a = 2;
}
virtual int add(int a,int b) {
return a + b;
}
virtual int mult(int a,int b) {
return a * b;
}
virtual void print() {
cout << this->a << endl;
}
virtual int getA() {
return this->a;
}
};
int main() {
Interface1 * c1 = new Child(1);
Interface2 * c2 = new Child(2);
cout << c1->add(1, 2) << endl;
cout << c2->mult(1, 2) << endl;
c1->print();
delete (Child *)c1;
delete (Child *)c2;
system("pause");
}
你會發現,這裡的Interface1和Interface2就像java中一個介面,它沒有自己的實現,而是定義了一套模板,交給子類去實現,java介面與抽象類的區別主要在於,介面可以實現多個,而抽象類只能被繼承一次,而在C++中的多繼承,就可以不用擔心這個抽象類只能被繼承一次。
相關文章
- C++ 抽象類快速使用C++抽象
- 抽象類和介面抽象
- 介面和抽象類 (abstract)抽象
- java中抽象類和介面Java抽象
- 介面和抽象類詳解抽象
- 介面的行為抽象和抽象類的行為抽象抽象
- Java基礎-抽象類和介面Java抽象
- Java抽象類和介面 小白版Java抽象
- 介面和抽象類的區別抽象
- 介面、虛擬函式、純虛擬函式、抽象類函式抽象
- Python 3 快速入門 3 —— 模組與類Python
- Kotlin學習快速入門(3)——類 繼承 介面Kotlin繼承
- 抽象類和介面,你瞭解多少?抽象
- 抽象類VS介面抽象
- 抽象類與介面抽象
- C++快速入門+20201011C++
- 關於抽象類和介面的初步理解抽象
- java介面和抽象類的簡單理解Java抽象
- Java中抽象類和介面的區別Java抽象
- JAVA基礎之三-介面和抽象類Java抽象
- 抽象基類和純虛擬函式抽象函式
- Java的抽象類 & 介面Java抽象
- 抽象類 & 介面比較抽象
- 抽象方法和抽象類抽象
- PHP中的 抽象類(abstract class)和 介面(interface)PHP抽象
- 結合實戰理解 Java 抽象類和介面Java抽象
- Java常見知識點彙總(④)——虛擬函式、抽象函式、抽象類、介面Java函式抽象
- JMeter 介面測試快速入門JMeter
- java-介面和抽象類的聯絡和區別。Java抽象
- 13 個示例快速入門 JS 抽象語法樹JS抽象語法樹
- 抽象類及介面詳解抽象
- 快速入門開發實現訂單類圖片識別結果抽象解析抽象
- 利用 es6 new.target 來對模擬抽象類抽象
- 介面和抽象理解抽象
- JavaSE基礎知識學習—–抽象類和介面Java抽象
- 全網最適合入門的物件導向程式設計教程:50 Python函式方法與介面-介面和抽象基類物件程式設計Python函式抽象
- Java 的抽象類, 介面以及內部類Java抽象
- C#快速入門教程(16)—— 介面C#