使用C進行物件導向程式設計

2021-08-15 06:58:16 字數 3490 閱讀 2743

在 中 如果考慮要將在棧中儲存的值限定在一定範圍內應該怎麼辦呢?例如只允許0到9內的值push至棧中,該範圍以外的值或是空值則不能被push至棧中。

如果重新再編寫乙個方法進行

bool pushwithrangechenk(stack *p,int val ,int min,int max)

stack;

#define newstackwithrangecheck(buf,min,max)

static bool israngeok(const stack *p,int val)

bool push(stack *p, int val)

p->pbuf[p->top++] = val;

return true;

}

上面**結構體裡 儲存了是否需要進行範圍檢查(needrangecheck)的資訊以及值的有效範圍(min,max),並且定義了新的巨集,用來生成帶有範圍檢查功能的棧。

int buf[10];

stack stack = newstackwithrangecheck(buf, 0, 9);

注意:

如果只有這樣簡單的功能,上述方法足夠應付了,但是以上**中仍然有以下問題。

因為結構體成員 needrangecheck、min、max 值在israngeok函式中被使用,將它們作為結構體成員讓所有函式都可以看到是不合適的,也就是說存在作用域汙染問題,所以需要把這些成員分離出去:

typedef structrange;

typedef struct stack;

#define newstackwithrangecheck(buf,prange)

將範圍檢查分離出來的棧:

static bool israngeok(const range * p,int val)

bool push(stack *p, int val)

p->pbuf[p->top++] = val;

return true;

}

檢查功能的通用化

之前對棧加入了輸入值上限和下限的檢查功能,一般情況下,檢查並不限於範圍檢查,例如,如果要求每次push到棧中的值都必須比上次的值大(雖然一般不會有這種要求),目前的**還無法滿足要求,但是只要將輸入值檢查變得更通用化就能解決這個問題

首先:將檢查輸入值的通用職責轉移到結構體中:

#ifdef __cplusplus

extern "c"validator;

typedef structrange;

typedef structpreviousvalue;

typedef struct stack;

//5 

bool validaterange(validator * pthis,int val);

bool validateprevious(validator * pthis,int val);

bool push(stack *p, int val);

bool pop(stack *p,int *pret);

//6#define rangevalidator(prange)

#define previousvalidator(pprevious)

#define newstack(buf)

#define newstackwithrangecheck(buf,prange)

#define newstackwithvalidator(buf,pvalidator)

#ifdef __cplusplus

}#endif

1.validator 結構體中的第乙個成員是函式指標。該函式的引數為指向validator結構體的指標和需要校驗的值,並以bool型別返回校驗結果。

2.第二個成員為校驗是所需要的資料。由於校驗型別不同,所以需要被校驗的型別也不盡相同,為了能夠儲存任意型別資料,這裡使用了void指標。

3.如果是範圍檢查,則2中的void指標接受的資料為range結構體。

4.如果是push值遞增的校驗 則2中的void指標接受的資料為儲存上次push的值的結構體。

5.函式指標所指向的校驗函式,validator的pdata成員是void指標,因此先通過型別轉換取出校驗時所必須的值,然後進行校驗處理。

6.使得結構體的生成變得更加簡單的巨集。

c 物件導向程式設計 物件導向

什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...

JS物件導向使用物件導向進行開發

對 js 中的物件導向的基礎進行講述,初體驗使用物件導向進行開發 物件導向的概念及特性 用物件導向的方式解決簡單的標籤建立例項 物件導向就是使用物件 物件導向開發就是使用物件開發 面向過程就是以過程的方式開發 物件導向是面向過程的封裝 抽象性如果需要用一物件來描述乙個資料,那就需要抽取這個物件的核心...

C 物件導向程式設計

1.1 類與物件 物件 object 是類 class 的乙個例項 instance 如果將物件比作房子,那麼類就是房子的設計圖紙。所以物件導向程式設計的重點是類的設計,而不是物件的設計。類可以將資料和函式封裝在一起,其中函式表示了類的行為 或稱服務 類提供關鍵字public protected 和...