微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 《程序设计与数据结构》——什么是类?

《程序设计与数据结构》——什么是类?

时间:09-10 来源:周立功单片机 点击:

求?validateOddEven()函数接口的实现详见程序清单 2.21。

程序清单 4.4 偶校验器接口函数的实现

1    bool validateOddEven(OddEvenValidator *pThis, int value) 

2    { 

3          return (!pThis -> isEven && (value % 2)) || (pThis -> isEven && !(value % 2)); 

4    }

显然,无论是什么校验器,其共性是value值合法性判断,因此可以共用一个函数指针,即特殊的函数指针类型RangeValidate和OddEvenValidate被泛化成了一般的函数指针类型Validate。其次,由于每个函数都有一个指向当前对象的pThis指针,因此特殊的结构体类型RangeValidator *和OddEvenValidator *被泛化成了void *类型,即可接受任何类型的数据:

1    typedef bool(*const Validate)(void *pThis, int value); 

2    typedef struct{ 

3          Validate validate;

4          const int min; 

5          const int max; 

6    }RangeValidator; 

7

8    typedef struct{

9          Validate validate; 

10        bool isEven;

11  }OddEvenValidator;

校验器泛化接口的实现详见程序清单 2.22。

程序清单 4.5 通用校验器接口的实现(validator.c)

1    #include "validator.h" 

2

3    bool validateRange(void *pThis, int value) 

4    { 

5          RangeValidator *pRangeValidator = (RangeValidator *)pThis; 

6          return pRangeValidator -> min <= value && value <= pRangeValidator -> max; 

7    }

8

9    bool validateOddEven(void *pThis, int value)

10  {

11        OddEvenValidator *pOddEvenValidator = (OddEvenValidator *)pThis; 

12        return (!pOddEvenValidator -> isEven && (value % 2)) || 

13             (pOddEvenValidator -> isEven && !(value % 2)); 

14  }

为了便于阅读,程序清单 4.6展示了范围值校验器和奇偶校验器的接口。

程序清单 4.6 通用校验器接口(validator.h)

1    #pragma once; 

2    #include

3

4    typedef bool(*const Validate)(void *pThis, int value);

5    typedef struct{

6          Validate validate;

7          const int min;

8          const int max; 

9    }RangeValidator;

10

11  typedef struct{

12        Validate validate; 

13        bool isEven;

14  }OddEvenValidator; 

15

16  bool validateRange(void *pThis, int value);

17  bool validateRange(void *pThis, int value);

18  #define newRangeValidator(min, max)    {(validateRange), (min), (max)}    // 初始化RangeValidator

19  #define newOddEvenValidator(isEven)  {{validateOddEven}, (isEven)}   // 初始化OddEvenValidator

这个接口主要由所有的操作声明构成,这些操作适用于这个类的所有对象,详见图 4.3。

图 4.3 类图

以范围值校验器为例,假设min=0,max=9,使用名为newRangeValidator的宏将结构体初始化的使用方法如下:

RangeValidator rangeValidator = newRangeValidator(0, 9);

注意,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top