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++中的多繼承,就可以不用擔心這個抽象類只能被繼承一次。
相關文章
- JAVA抽象類、介面和C++的虛擬函式對比Java抽象C++函式
- C++ 抽象類快速使用C++抽象
- 介面和抽象類抽象
- 抽象類和介面抽象
- 介面和抽象類 (abstract)抽象
- C++中抽象類、虛擬函式和純虛擬函式C++抽象函式
- java中抽象類和介面Java抽象
- javascript快速入門12--函式式與物件導向JavaScript函式物件
- 介面的行為抽象和抽象類的行為抽象抽象
- C++:純虛擬函式與抽象類C++函式抽象
- Java基礎-抽象類和介面Java抽象
- 抽象類和介面的區別抽象
- 介面和抽象類的區別抽象
- Java抽象類和介面 小白版Java抽象
- 介面、虛擬函式、純虛擬函式、抽象類函式抽象
- 抽象類和介面,你瞭解多少?抽象
- Java抽象(方法,類)和Java的介面Java抽象
- 抽象類與介面抽象
- 抽象類VS介面抽象
- 介面與抽象類抽象
- VS2005入門之深入繼承 – 抽象類和介面及例項剖析繼承抽象
- Kotlin學習快速入門(3)——類 繼承 介面Kotlin繼承
- 抽象類和介面的相同點和不同點抽象
- java介面和抽象類的簡單理解Java抽象
- 關於抽象類和介面的初步理解抽象
- Java中抽象類和介面的區別Java抽象
- JAVA中介面和抽象類的區別Java抽象
- PHP物件和介面抽象類注意事項PHP物件抽象
- JMockit學習之mock介面和抽象類Mock抽象
- 我如何理解Java中抽象類和介面Java抽象
- 深入理解Java的介面和抽象類Java抽象
- C# OOP:繼承,介面和抽象類C#OOP繼承抽象
- JAVA基礎之三-介面和抽象類Java抽象
- 抽象基類和純虛擬函式抽象函式
- Java的抽象類 & 介面Java抽象
- 抽象方法和抽象類抽象
- 抽象類和抽象方法抽象
- 利用 es6 new.target 來對模擬抽象類抽象