一、 typedef
typedef为C/C++的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。作用是为一种数据类型定义一个新名字,或者简化一些复杂类型的声明。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
1.用途示例——定义一种类型的别名(注意区别于#define)
typedef long byte_4;
typedef char* pStr;
pStr s1,s2; //s1,s2都被定义为char*类型
//区别与#defin,#defin只是简单的字符替换
#defin pStr1 char*
pStr1 s3,s4; //s3被定义为char*类型,而s4只是char类型
2.用途示例——定义新结构struct的新名字
typedef struct tagMyStruct{
int num;
int len;
}MyStruct;
上述例子定义一个新的结构类型struct tagMyStruct,并定义新结构类型的别名为MyStruct,可以使用Mystruct varName来定义变量,但是直接使用tagMyStruct varName定义变量是不对的,只能使用struct tagMyStruct varName。
3.用途示例——定义机器无关的类型,在目标机器上获得最高精度
//定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:
typedef long double REAL;
//在不支持 long double 的平台二上,改为:
typedef double REAL;
//在连 double 都不支持的平台三上,改为:
typedef float REAL;
也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。
4.用途示例——为复杂的声明定义一个新的简单的别名。
typedef map<int,double,greater<double> > MYMAP;
具体方法是:在原来的声明里逐步用别名替换一部分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化版。举例:
4.1 原声明:int *
(*
a[5])(int, char*
);
变量名为a,直接用一个新别名pFun替换a就可以了:
typedef int *
(*
pFun)(int, char*);
原声明的最简化版:
pFun a[5];
4.2 原声明:void (*
b[10]) (void (*
)());
变量名为b,先替换右边部分括号里的,pFunParam为别名一:
typedef void (*
pFunParam)();
再替换左边的变量b,pFunx为别名二:
typedef void (*
pFunx)(pFunParam);
原声明的最简化版:
pFunx b[10];
4.3 原声明:doube(*
)() (*
e)[9];
变量名为e,先替换左边部分,pFuny为别名一:
typedef double(*
pFuny)();
再替换右边的变量e,pFunParamy为别名二
typedef pFuny (*
pFunParamy)[9];
原声明的最简化版:
pFunParamy e;
二、C语言中struct和C++中class的区别
注意C语言中是没有class关键字的。
C语言中struct和C++中class都是一种构造类型,结构体和类都可以看作是由用户自定义的一种复杂数据类型。
二者的区别可以总结为如下几点:
- C语言的struct中只能包含成员变量,而C++的class中不仅可以包含变量,还可以包含成员函数;
- C语言中可以通过结构体名来定义变量,C++中也可以通过类名定义变量。不同的是通过结构体定义的变量还是变量,而通过类定义的变量,有了新名称(对象)。
三、C++中struct和class的区别
C++中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。
C++中struct和class是可以通用的,但是有几个细节不同:
- struct中的成员变量默认是public属性的,class中的成员变量默认是private属性的;
- struct继承默认是public的,class继承默认是private的;
- class可以使用模板,而struct不能。
四、operator关键字
operator专门用于定义重载运算符的函数。
运算符重载的格式为:
返回值类型 operator 运算符名称 (形参列表)
{
//todo
}
可以将operator 运算符名称
这一部分看作函数名。
运算符重载函数除了函数名有特定的格式外,其他和普通函数并没有区别。
学习笔记啊,持续更新......
网友评论