现在的位置: 首页 > 综合 > 正文

typedef 的用法,typedef写在类里面的作用

2017年10月28日 ⁄ 综合 ⁄ 共 1014字 ⁄ 字号 评论关闭

平时,我们经常会是用到typtdef 来方便我们的编程,比如说一个类型名特别长,我为了书写方便和便于代码的阅读,可以使用typedef来实现别名功能,如

typedef int size;
size a = 5; //相当于int a = 5

复杂名字的简化

struct Hello_hi_bye  //假设有这么2b的名字,这么复杂
{	
	int b;
	float c;
}//可以简化	
typedef hello_hi_bye  ty;

//如此以来就可以减轻写代码的负担

hello_hi_bye  a;
hello_hi_bye b;
hello_hi_bye c;

//可以改写为
ty a;
ty b;
ty c;
//恩轻松多了!

写过mfc的人,或者写过win32程序的人一定有这种体验,就是很多的数据类型都是LPXXX,如 LPSTR,LPWSTR,LP就是指针的意思

我们也可以这样做

typedef   char*  LPCHAR  

最后,也是我今天要写这篇博文的目的;

在一个struct  或者 class 里边使用的话,可以达到一种比较奇妙的效果,叫~~~保存一种类型,有点抽象,不怕,我们立即看例子

#include<iostream>
struct Test
{
	typedef int  Aa;  //Aa 
	float a;
	int b;	

};

 int main()
 {	 
	 Test::Aa aa = 5;  //其实 aa就是int 的类型 
	 std::cout<<aa<<std::endl;   //输出5
	 
	 return 0;
 }

咋一看,貌似多此一举,我直接int  a = 5;不久行了吗,不急不急,我把它改一下

struct Test
{
	typedef ClassA  Aa;  //Aa 
	ClassA a;
	int b;	

};

这样子的话,就可以实现一个非常令人激动的功能:通过变量名字找到它的类型名

假设说:我知道有个变量 Test  x,我想要拿到x.a  ,但是我不知道x.a它是什么类型的,我写代码的时候需要定义一个和x.a一样类型的变量y =来接受这个下x.a,  可能 我们要做一些操作 ,这个时候,你!该怎么办??c语言有sizeof,可是没有typeof ,如果这个x的类,的定义里边有

typedef  int  Aa; 那么我就可以 这样写 

 

 Test::Aa  y = x.a; 

这样的话这个问题就解决了

PS: struct里边写typedef int Aa 这种代码并不会使得 对象的空间增大 sizeof(Test) 可知 大小还是8

其实这个用法主要使用在STL里边,用于迭代器的设计,通过迭代器识别出迭代器所指向的容器的类型

抱歉!评论已关闭.