C/C++关键字介绍

作者: 零岁的我 | 来源:发表于2020-02-15 14:39 被阅读0次

    一、 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都是一种构造类型,结构体和类都可以看作是由用户自定义的一种复杂数据类型。
    二者的区别可以总结为如下几点:

    1. C语言的struct中只能包含成员变量,而C++的class中不仅可以包含变量,还可以包含成员函数;
    2. C语言中可以通过结构体名来定义变量,C++中也可以通过类名定义变量。不同的是通过结构体定义的变量还是变量,而通过类定义的变量,有了新名称(对象)。

    三、C++中struct和class的区别

    C++中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。

    C++中struct和class是可以通用的,但是有几个细节不同:

    1. struct中的成员变量默认是public属性的,class中的成员变量默认是private属性的;
    2. struct继承默认是public的,class继承默认是private的;
    3. class可以使用模板,而struct不能。

    四、operator关键字

    operator专门用于定义重载运算符的函数。
    运算符重载的格式为:

    返回值类型 operator 运算符名称 (形参列表)
    {
      //todo
    }
    

    可以将operator 运算符名称这一部分看作函数名。
    运算符重载函数除了函数名有特定的格式外,其他和普通函数并没有区别。

    学习笔记啊,持续更新......

    相关文章

      网友评论

        本文标题:C/C++关键字介绍

        本文链接:https://www.haomeiwen.com/subject/adeefhtx.html