2008年11月27日 星期四

typedef

typedef主要有三個功能~依序如下...
簡單型態的別名

// 定義無號單字節的型態
// 則宣告BYTE x;
// 就是宣告unsigned char x;
typedef unsigned char BYTE;
typedef unsigned short WORD;// 定義無號雙字節的型態
typedef unsigned long DWORD;// 定義無號四字節的型態



結構型態的別名

typedef struct StructTag{
  int mA;
  int mB;
} STRUCTTAG, *PSTRUCTTAG;

當要建立這個結構的物件時,就可以用別名 STRUCTTAG 和 PSTRUCTTAG,例如
STRUCTTAG StructObj;
PSTRUCTTAG pStructObj;
就相當於
struct StructTag StructObj;
struct StructTag *pStructObj;

函數的別名
main.cpp
#include <iostream> 
#include "sort.h"
using namespace std; 

int main() { 
  int number1[] = {3, 5, 1, 6, 9};
  sort(number1, 5, larger);
  cout << "大的在前 ";
  for(int i = 0; i < 5; i++) {
    cout << number1[i] << " ";
  }
  cout << endl;

  int number2[] = {3, 5, 1, 6, 9};
  sort(number2, 5, smaller);
  cout << "小的在前 ";
  for(int i = 0; i < 5; i++) {
    cout << number2[i] << " ";
  }
  cout << endl;

  return 0; 
}


sort.h
typedef bool (*CMP)(int, int); // 把它想成說CMP是變數,且它取代bool (*) (int,int)這一個回傳值為bool,參數值為(int,int)的型態
void swap(int&, int&);
bool larger(int a, int b);
bool smaller(int a, int b);
void sort(int*, int, CMP);


sort.cpp
#include "sort.h"

void swap(int &a, int &b) {
  int t = a; 
  a = b; 
  b = t;
}

bool larger(int a, int b) {
  return a > b;
}

bool smaller(int a, int b) {
  return a < b;
}

void sort(int* arr, int length, CMP compare) { 
  int flag = 1; 

  for(int i = 0; i < length-1 && flag == 1; i++) { 
    flag = 0; 
    for(int j = 0; j < length-i-1; j++) { 
      if(compare(arr[j+1], arr[j])) { 
        swap(arr[j+1], arr[j]); 
        flag = 1; 
      } 
    } 
  } 
}


參考資料:
C++ Gossip: 函式指標
《教學》typedef 知多少?

延伸閱讀:
typedef 與 link list的配合使用

沒有留言: