目錄
- 1. 什么是抽象類
- 2. C++中的抽象類與介面
1. 什么是抽象類
在進行面向物件分析時,會發現一些抽象的概念,比如圖形Shape,要想計算圖形的面積,就必須先知道具體的圖形型別,因為對概念上的“圖形”求面積是沒有意義的,
在面向物件理論中,現實世界中的抽象概念可以用抽象類表示
- 抽象類是一種只能定義型別、不能產生物件的類
- 抽象類的直接特征是相關函式沒有完整的實作
- 抽象類只能用于繼承,并在子類中重寫相關函式
2. C++中的抽象類與介面
C++沒有抽象類的概念,而是通過純虛函式來實作抽象類,純虛函式是指只定義函式原型的成員函式,語法規則為:
class Shape
{
public:
virtual double area() = 0; // "=0"用于告訴編譯器當前是宣告純虛函式,不需要定義函式體
};
- 類中存在純虛函式,那么這個類就成為抽象類,只能用作父類被繼承
- 子類必須實作純虛函式的具體功能
- 純虛函式被實作后成為虛函式
- 如果子類沒有實作全部的純虛函式,則子類成為抽象類
#include <iostream>
#include <string>
using namespace std;
class Shape
{
public:
virtual double area() = 0;
};
class Rect : public Shape
{
int ma;
int mb;
public:
Rect(int a, int b)
{
ma = a;
mb = b;
}
double area()
{
return ma * mb;
}
};
class Circle : public Shape
{
int mr;
public:
Circle(int r)
{
mr = r;
}
double area()
{
return 3.14 * mr * mr;
}
};
void area(Shape *p)
{
double r = p->area();
cout << "r = " << r << endl;
}
int main()
{
Rect rect(1, 2);
Circle circle(10);
area(&rect);
area(&circle);
return 0;
}

如果一個C++類滿足下面的條件,則這個類被稱為介面(Interface),
- 類中沒有定義任何的成員變數
- 所有的成員函式都是public的
- 所有的成員函式都是純虛函式
介面是一種特殊的抽象類,
class Interface
{
public:
virtual bool open() = 0;
virtual void close() = 0;
virtual bool send(char *buf, int len) = 0;
virtual int receive(char *buf, int len) = 0;
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/102073.html
標籤:C++
上一篇:多型
下一篇:C++:記憶體管理
