簡單型態的別名:
// 定義無號單字節的型態
// 則宣告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的配合使用
沒有留言:
張貼留言