【C++再学习】【02】C部分一些整理

来源:互联网 发布:微信mac客户端下载 编辑:程序博客网 时间:2024/05/22 06:11

        希望对象执行某种动作,需要向对象“发送”消息,C++提供了两种方式,一种方式是使用对象所属类中定义的方法,另一种方式是重新定义操作符。


        再整理一下C++基本整型:charshortintlong,每种类型又分有符号版本和无符号版本,所以一共有8中整数类型。关于他们的长度,不同的系统可能会不同,但是C++有一个标准:short至少16位;int至少与short一样长;long至少32位,且至少与int一样长,所以几种类型的字节数长度比较一般有:short <= int <= long <= long long。Sizeof运算符可以得到类型的长度(字节数表示),注意一个字节不一定是8位,可以通过查看<climits>头文件中的CHAR_BIT变量来获取一个字节有多少位,不过一般的系统都是8位。常见配置为:short 2字节16位、int 4字节32位、long 4字节32位,相应的unsigned shortunsigned intunsigned long跟前边对应。16位有符号整型表示范围为:-32768~32767,32位有符号整型表示范围为:-2147483648~214748364716位无符号整型表示范围为:0~65535,32位无符号整型表示范围为:0~4294967295


        constC语言中的#define优势:1、能够明确指定类型;2、可以使用作用域规则将定义限制在特定的函数或文件中;3、可以将const用于更加复杂的类型比如数组结构体。


    注意:char* str = "Hello";这种形式只能用在初始化str指针的时候,像这种用法是不可以的,char* str;str = "Hello";一定要注意在类中使用的时候,将数据成员声明成char * str,而在构造函数中用str = "Hello"初始化,这样干不可以,可以采用strcpy(str,"Hello")这种形式


        计算机将浮点数分成两部分来存储:基准值和缩放因子,3.141593141.59的基准值都是0.314159,而缩放因子分别为1010000C++floatdoublelong double的有效位数要去是:float至少32位,double至少48位且不少于floatlong double至少和double一样多。不过通常float32位,double64位。程序默认将浮点常量存储为double类型,如果想让常量为float类型可使用f后缀。除法操作符(/)的行为取决于操作数的类型,如果两个都是整数,则执行整数除法,只要其中有至少一个操作数是浮点数,则执行浮点数除法。


        再看共用体的时候还是觉得有些奇怪,设计这样一种类型到底有什么意思,看下边这个例子似乎有点可以接受了:假设管理一个小商品目录,其中一些商品ID为整数,而另外一些商品ID为字符串,在这种情况下可以使用union

struct widget{    char brand[20];    int type;    union id    {        long id_num;        char id_char[20];    }id_val;};......widget prize;......if (prize.type == 1)    cin>>prize.id_val.id_num;else       cin>>prize.id_val.id_char;

       

        程序在存储数据时必须跟踪3种基本属性:信息存储在何处、存储的值为多少、存储的信息是什么类型。


        将整数变量加1后,其值将增加1;而将指针变量加1后,增加的量等于它指向的类型的字节数。


    switch语句中case后跟的必须是常量或者是常量表达式。


        OOP一个重要的特点是强调在程序的运行阶段而不是编译阶段来进行决策。运行阶段决策有更大的灵活性,可以根据当时的情况动态调整,不像C语言中在程序编译的阶段都确定下来。那这种形式是怎么在C++中体现的呢?答案就是大名鼎鼎加超级蛋疼的newdelete组合。利用newdelete可以灵活地进行动态编程。使用newdelete动态内存管理时要注意:1、忘记delete导致内存泄露;2、野指针;3、重复delete使堆空间遭到破坏。


        C++3种管理数据内存的方式:自动存储、静态存储、动态存储。在函数内部的局部变量属于自动存储,只在局部代码块有效;在函数外边定义或者是static变量属于静态存储,在整个程序运行期间有效;使用new动态分配的变量属于动态存储,可以利用delete动态控制数据生存时间。通常,编译器使用三块独立的内存:一块是静态变量,一块是动态存储,一块是自动变量。


    程序源码组织:

    1、头文件:主要包括结构体原型声明、类声明、函数原型声明;

    2、基本实现文件:主要包含头文件中各种原型的实现;

    3、源码文件:利用结构体、类、函数等来实现程序具体功能。

    不要在头文件中包含函数定义以及普通变量声明,那样做会带来一些麻烦。头文件中常包含的内容主要有:函数原型、使用#define或const定义的符号常量、结构体声明、类声明、模板声明、内联函数等。

0 0