C++基本知识小结
1.函数的形参也可看成局部变量,它们只能在相应的函数中使用。
2.变量是内存空间的一种抽象,程序中定义的每个变量在程序运行时刻都有与之对应的内存空间。
3.动态内存空间用new操作分配.用delete操作收回。
4.全局变量,是在main()函数执行前就分配好了的。
5.在C++中,一个模块通常由两个源文件构成,一个是.h文件,用于存放模块接口的定义;另一个是.cpp文件用于存放模块的实现。
6.在一个模块中要用到另一个模块中定义的程序实体时,需要在前者的.cpp文件中用文件包含命令把后者的.h文件包含进来。
7.C++中的关键词static有两个不同的含义。在局部变量的定义中,static修饰符用于指定局部变量采用静态存储分配;而在全局标识符的定义中,static修饰符用于把全局标识符的作用域
改为文件作用域。
8.名空间是给一组程序实体的定义取一个名字使之构成一个作用域——名空间作用域。
9.在一个名空间中定义的全局标识符,其作用域为该名空间。当在一个名空间外部需要使用该名空间中定义的全局标识符时,可用该名空间的名字来修饰或受限。
10.在C++中,允许在定义或声明函数时,为函数的某些参数指定默认值。当调用这些函数时没有提供相应的实参时,则相应的形参采用指定的默认值,否则相应的形参采用调用者提供的实参值。
11.重载函数的返回类型,即函数类型可以相同,也可以不同。如果仅仅是返回类型不同,而函数名相同.形参表也相同,则是非法的。
12.取地址符&来获得一个变量的地址。
13.对于数组和函数,它们的内存首地址可以不用&来获得,数组变量名和函数名本身就表示它们在内存中的首地址。
14.空指针不代表任何内存空间的地址,它属于所有的指针类型。
15.在C++的标准头文件cstdio或stdio.h中,定义了一个符号常量NULL,用于表示空指针。
16.对于一个指针变量只能把在定义该指针变量时所指定类型的变量的地址赋给它
17.在使用指针变量前,一定要对其进行初始化或使其有确定的地址数值。
18.任何类型的指针都可以赋给void *类型的指针。
19.对于一个指针变量可以通过间接访问操作符指向类成员函数的指针*来访问它所指向的变量。
20.当输出字符指针(char *)时,输出的不是指针值,而是该指针所指向的字符串。
21.把指针作为形参的类型可以产生两个效果:提高参数传递效率,通过形参改变实参的值。
22.指向常量的指针变量可以指向const常量也可指向变量,只不过不能通过它来改变所指向的变量值而已。
23.对于一个指向变量的指针变量,不允许它指向一个常量。
24.动态变量:从静态的程序中无法确定它们的存在,只有当程序运行起来,随着程序的运行,它们根据程序的需要动态产生和消亡。其内存分配在堆区。动态变量没有名字,因此对动态变量的访问需要通过指向动态变量的指针变量来进行。
25.在C++程序运行期间,动态变量不会自动消亡,在一个函数调用中创建的动态变量,函数返回后仍然存在(可以使用)。如果不再需要这个动态变量了,则应该显式使之消亡。
26.new和delete是运算符,执行效率高malloc和free是函数,执行效率相对较低。
27.如果创建的是动态对象,new会去调用对象类的构造函数,而malloc则不会。
28.用delete或free撤消动态变量后,C++编译程序一般不会把指向它的指针变量的值赋为NULL,这时就会出现“悬浮指针”(dangling pointer),它指向一个无效空间。
29.对于一个动态变量,如果没有撤消它,而仅仅是把指向它的指针变量指向了别处,或指向它的指针变量的生存期结束了,这个动态变量就会变成一个“孤儿”,这种现象称为内存泄露。程序中再也访问不到它,而它却一直占据内存空间,从而导致内存空间的浪费。
30.引用是C++中针对变量的一种别名机制
31.引用不能单独存在,它的存在的前提是它所代表的变量首先存在
32.引用不能单独使用,必须进行初始化
33.引用变量定义后,它不能再引用其它变量
34.当引用类型变量的初始化值是常数时,则必须将该引用定义成const类型。
35.结构体是一种复合类型,结构体中可包含多个类型不同的数据成员
36.C++的结构体中允许有成员函数
37.共用体是将多个数据成员组织为一个整体,它们在内存中占用同一段存储单元
38.枚举类型是将变量的值一一列举出来,作用:增强程序代码的可读性。
39.使用关键字typedef可以将已有的类型名用新的类型名来代替。
40.当一个程序准备运行时,操作系统将为其分配一块内存空间,其中包括四个部分:静态数据区(static code).代码区(code).栈区(stack)和堆区(heap ,或称自由存储区,free sto
re)。
41.静态数据区用于全局变量.static存储类的局部变量以及常量的内存分配。
42.代码区用于存放程序的指令,对C++程序而言,代码区存放的是所有函数代码;
43.栈区用于auto存储类的局部变量.函数的形式参数以及函数调用时的有关信息(如函数返回地址等)的内存分配;
44.堆区用于动态变量的内存分配。
45.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。
46.函数是一个能完成某一独立功能的子程序,也就是程序模块。每个C++程序至少包含一个函数,即main函数(主函数)。
47.当你要获取地址的时候,你必须要用指针
48.C++ 使用 ** 操作符指派一个指针指向另一指针
49.C++中可以定义一个指针变量,使它指向一个函数。
50.数组名即指针是第一个元素的地址,可以通过指针对数组元素进行访问
51.在指针上加上(或减去)一个整型数值 n 等效于获得一个新指针,该新指针指向指针原来指向的元素之后(或之前)的第 n 个元素。
52.在类内部:
⏹ 声明成员函数是必需的
⏹ 定义成员函数则是可选的
53.类外部定义的成员函数必须指明它们是在类的作用域中
54.数据抽象一种依赖于接口和实现分离的编程技术
55.类设计者必须关心类是如何实现的,使用该类的程序员不必了解这些细节;使用者仅需了解类型的接口,考虑该类型做什么,而不必具体地考虑该类型如何工作。
56.重载的成员函数和普通函数应用相同的规则:两个重载成员的形参数量和类型不能完全相同。
57.一旦定义了类,那以我们就知道了所有的类成员,以及存储该类的对象所需的存储空间
58.在一个给定的源文件中,一个类只能被定义一次
59.定义一个类时,也就是定义了一个类型
60.头文件保护符用于避免多重包含
61.成员函数具有一个附加的隐含形参,即指向该类对象的一个指针,这个隐含形参命名为 this,与调用成员函数的对象绑定在一起
62.成员函数不能定义 this 形参,而是由编译器隐含地定义
63.成员函数的函数体可以显式使用 this 指针,但不是必须这么做
64.构造函数是特殊的成员函数,构造函数的名字与类的名字相同,不能指定返回类型,可以没有形参,也可以定义多个形参。
65.只要创建类类型的新对象,都要执行构造函数
66.构造函数的工作是保证每个对象的数据成员具有合适的初始值
67.与任何其他函数一样,构造函数具有名字.形参表和函数体。与其他函数不同的是,构造函数也可以包含一个构造函数初始化列表:
⏹ 构造函数初始化列表以一个冒号开始
⏹ 接着是一个以逗号分隔的数据成员列表
⏹ 每个数据成员后面跟一个放在圆括号中的初始化式
68.为一个类声明的构造函数的数量没有限制,只要每个构造函数的形参表是唯一的
69.不同的构造函数允许用户指定不同的方式来初始化数据成员
70.构造函数不能声明为 const
71.当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数。
72.一个类哪怕只定义了一个构造函数,编译器也不会再生成默认构造函数
73.static 类成员,类类型的全体对象共享,static 成员不是类对象的组成部分
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论