typedef可以给各种类型(基本类型、数组、函数、函数指针、类、模板…)起别名
Tips : 需要注意数组和函数指针的定义方法
1、基本数据类型
重命名数据类型
typedef int INT, * P_INT
typedef int INT, * P_INT
cout << typeid(INT).name() << endl;
cout << typeid(P_INT).name() << endl;
输出:
int
int *
此时,int被重命名为INT,而int指针类型被重命名为P_INT
2、结构体
struct Book{
char title[50];
char author[20];
} book;
typedef struct{
char title[50];
char author[20];
} Book, *P_Book;
...
Book book; //声明
P_Book p_book; //结构体指针
Tips: 由于使用typedef定义结构体时并没有给结构体名字,所以不能在该结构体中定义构造函数
3、类
与结构体很相似
class classA {
public:
void output() {
cout << "output";
}
};
typedef classA A;
int main()
{
A a;
a.output();
return 0;
}
输出
output
4、数组类型
用于定义一种数组类型
typedef int arr[10];
定义了一种包含10个int元素的数组类型,名为arr
arr a,b; //定义
a和b是arr类型的两个变量,分别是包含10个int元素的数组。
5、函数类型和函数指针
(1)函数类型
typedef string FUNC_TYPE(int);
string func1(int a) {
cout << "Input: "<<a << " ";
return "func1";
}
string func2(int b) {
cout << "Input: " << b<<" ";
return "func2";
}
int main()
{
FUNC_TYPE* f=func1;
cout << f(233)<<endl;
f = func2;
cout << f(666);
return 0;
}
输出:
Input: 233 func1
Input: 666 func2
typedef string FUNC_TYPE(int);
FUNC_TYPE类型的函数满足返回值类型是string,参数类型是int
(2)函数指针
函数类型和函数指针可以相互转换
typedef double* FUNC_TYPE(const char*); //定义一个函数类型
typedef double* (*P_FUNC_TYPE)(const char*); //定义一个类型的函数指针
//这类指针的名字就是P_FUNC_TYPE,它指向返回值为double*,参数为const char*的函数
double* func(const char* str) {
cout << str << endl;
return NULL;
}
int main()
{
P_FUNC_TYPE p_func = func;
FUNC_TYPE* pp_func = func;
p_func("P_FUNC_TYPE");
pp_func("FUNC_TYPE");
return 0;
}
输出:
P_FUNC_TYPE
FUNC_TYPE
6、模板
持续更新…