typedef 的基本使用方法*
在项目开发时我们经常使用typedef来给基本数据类型和自定义数据类型和类起一个别名,这用做有利于提高代码的可读型和后期维护上面都有很好的作用。
##对于基本数据类型
typedef int flag;//flag即为int类型的别名
typedef float cheng;//cheng即为float类型的别名
typedef double ming;//ming即为double类型的别名
typedef还可以对基本类型替换多个变量名
typedef int cheng,ming;
可以在不同场景下灵活运用
int main() {
cheng a;
ming b;
a=1;
b=2;
cout <<""<<a<<endl<<""<<b<<endl<<"类型长度为"<< sizeof(cheng)<<endl;
return 0;
}
1
2
类型长度为4
进程已结束,退出代码0
对于结构体数据类型
在结构体数据类型中,typedef的使用频率是最高的。
struct Personinfo{
int index;
char name[30];
short age;
};
typedef Personinfo abc;//替换Personinfo类型结构体
这样写比较优雅
typedef struct Personinfo{
int index;
char name[30];
short age;
}abc;
同样的结构体数据类型也可以替换多个名称。
在类上面的使用
typedef class dbhcsdbc{
成员列表;
}class A,CLASSa;
这样这个类就存在class A,CLASSa两个别名。
在复杂数组和指针上的运用
//可以代替很复杂的指针类型
typedef int (*)(int i)pFun;//pFun代替指针(*)(int i)
//可以代替复杂数组类型
typedef char (PTR_TO_ARR)[30];
typedef与宏#define的区别
简单来说,typedef是对数据类型进行彻底的封装,而宏只是简单的名称替换。
typedef int jjj;
unsigned jjj a;//编译器报错
#define jjj int;
unsigned jjj a;//编译通过。
typedef作用域的限定
typedef关键字具有作用域,范围是别名所在的区域或名称空间。
#include <iostream>
#include <string>
using namespace std;
namespace pet{
typedef string kind;
typedef string petname;
typedef string voice;
typedef class dog{
private:
kind m_kindName;
protected:
petname m_dogName;
int m_age;
voice m_voice;
void setVoice(kind name);
public:
dog(kind name);
void sound();
void setName(petname name);
}Dog,DOG;
void dog::sound() {
}
void DOG::dog(kind name) {
}
}
在命名空间范围外,该关键词就不会起作用。