本文对自己在学习C++过程当中觉得一些容易忘记的零碎知识点的整理,希望在今后忘记的时候能够再过来回顾一下。
1. C++中常量的定义
可以使用两种方式定义常量:
(1)使用#define预处理器:宏定义是字符替换,没有数据类型的区别,直接替换,不会分配内存
#define PI 3.1415926
上面的一行代码就是定义一个宏变量PI,它的值为3.1415926
(2)使用const关键字定义:这种方法需要进行内存分配
const double PI = 3.1415926;
(1)static修饰局部变量时,可以在函数调用之间保持局部变量的值
(2)static修饰全局变量时,会使变量的作用域限制在它声明的文件内
(3)static修饰类的数据成员上,会导致仅有一个该成员的副本被类的所有对象共享
静态变量不显式的初始化也会被隐式初始化为NULL或是0.
定义全局变量时,系统会对其进行自动初始化
3. extern存储类
extern用于提供一个全局变量的引用,在一个文件里可以通过extern引进另一个文件中的全局变量进行调用。
4. 杂项知识点
(1)sizeof用于返回变量类型所占用的字节数
(2)rand()函数返回一个随机数
(3)形参和函数内的其他局部变量一样,在进入函数时被创建,退出函数时被销毁
(4)不能返回一个对局部变量的引用,但是可以返回一个对静态变量的引用
(5)cerr流用来显示错误信息,clog流用来输出日志消息
5. C++面向对象
(1)类定义结束后的分号不能忘记
(2)类成员函数:a.可以定义在类定义内部 b.单独使用范围解析运算符::来定义
(3)类访问修饰符:成员和类的默认访问修饰符是private
a.公有成员public
在类的外部是可以访问的
b.私有成员private
在类的外部是不可访问的,甚至是不可查看的,只有类和友元函数可以访问私有成员,不能被派生类访问
实际操作中,我们一般会在私有区域定义数据,在共有区域定义函数
c.保护成员protected
保护成员变量和函数与私有成员十分相似,但是有一点不同,保护成员在派生类中是可以访问的
(4)可以使用初始化列表来初始化字段
line::line(double len) :length(len){
.....
.....
}
(5)友元函数friend定义在类外部,但是有权访问类的所有私有成员和保护成员,友元函数在类中定义过,但并不是成员函数。同时友元函数的定义不需要加类名,因为它不属于类的成员函数
(6)内联函数:内联函数使用关键字inline,在类定义中定义的函数都是内联函数,即使没有使用inline关键字
(7)类的静态成员的初始化不能放在类的定义中,可以在类外通过范围解析运算符重新声明并初始化
(8)一个派生类继承了所有的基类的方法,但下列情况除外:
a.基类的构造函数、析构函数和拷贝构造函数
b.基类的重载运算符
c.基类的友元函数
(9)函数重载:函数名相同,参数个数以及类型不同
(10)多态:每个子类都有一个基类中函数的独立实现
(11)数据封装:是一种把数据和操作数据的函数捆绑在一起的机制
(12)数据抽象:一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制
(13)C++接口(抽象类):接口描述了类的行为和功能,而不需要完成类的特定实现。如果类中至少有一个函数被声明为纯虚函数(纯虚函数是在声明中使用“=0”来指定的),则这个类就是抽象类。
抽象类不能被用于实例化对象,它只能作为接口使用。如果一个抽象类的子类需要被实例化,则必须实现每个虚函数