基础知识:
-
引用reference:
引用:复合类型,相当于变量的另外一个名字,绰号,节省了拷贝带来的内存损耗,在实际程序中,主要用作函数的形式参数; -
类class:
理解成图纸,不占用内存,包括了成员变量和成员函数。对象是类的实例化,可以看成零件。 -
指针pointer:
指针也是一种变量!指针的内容是地址!
〇、什么是const(必须知道的事情)?
-
简单理解:
const的目的就是定义一个“不会被修改的常量” -
可以修饰:
变量、引用、指针,可以用于函数参数、成员函数修饰。成员变量。 -
作用:
使用const可以减少代码出错的概率!避免magic number 以及增强程序的可读性。
这个常量既可以防止程序其他地方不小心修改这个值,也能让程序员比较方便的调整这个值的大小。 -
与宏定于#define的区别:
const有类型,可以进行类型检查,而宏定义没有。 -
常量指针和指针常量
常量指针(指向常量的指针)
指针常量(地址是常量,指针指向的地址不变) -
Const值一旦创建后就不能修改,所以const对象必须初始化;
一、const的初始化:
const值一旦创建后就不能修改,所以const对象必须初始化。
const int i=0;//正确
const int i;//错误
const对象可以用非const对象初始化,也可以赋给非const对象,同时也能参与运算,只要初始化后不改变它的值就没问题。
int i;
const int j=i;//正确
int m=j;//正确
二、const的作用域:
默认状态下,const对象仅在文件内有效,不同文件的const对象不是同一个对象
文件之间可以共享的方法:可以使用extern来解决问题。
三、const与引用
const 引用是指向const的引用
- 对常量的引用必须要用
const
:
const int c=42;
int &r1 = c; //错误,因为非常量引用可以改变所引用对象,所以这样不合理
const int &r2 = c; //正确,引用与对应的对象都是常量
四、 const与指针:
重要!重要!重要!
对着代码读:
- 把星号*读作指针,
- 把const读作常量
- 非常容易!!!
比如:
const int* p就是——常量指针
int* const p就是——指针常量
- 与常量引用相似,指向常量的指针必须要用const指针(指向常量的指针)
const int c=42;
int *r1=&c; //错误
const int*r2=&c;//正确
*r2=42;//错误,不能给指针所指对象赋值
- 常量指针(指向const的指针)和指针常量(const指针)
区分
- 常量指针(指向常量的指针),只能够读取内存中数据,却不能够修改内存中数据的属性的指针,称为指向常量的指针,简称常量指针。
和 - 指针常量(地址是常量,指针指向的位置(地址)不变,指针本身是一个常量,但是指针指向的内容可以改变)
(前两个字作为形容词修饰后两个字。同时大家也要注意const指针这一说法,不要理解成常量指针)
Int num=0;
Int*const cur=#//一直指向num
Const double pi=3.1415;
Const double * const pip=π//指向常量的常量指针。
现在举例子说明一下常量指针域指针常量到底如何区分。
- int const* cur; 常量指针,指向常量的指针
2.Const int * cur; 常量指针,指向常量的指针
-
int*const cur; 指针常量
-
const(int *) cur; //错误,不可以这么写
辨识小技巧:
对着代码读,把星号读作指针,把const读作常量,非常容易。
Step1: const在星号*的前面,那么就是常量指针
——“const前常量指针”
Step2: const在星号*的后面,那么就是指针常量
——“const后指针常量”
五、 const与类:
-
const成员变量:
类中声明变量为const类型。但是不可以初始化,必须要在构造函数初始化列表中初始化。
这样的变量其实只是在一个对象中是不变的,要想在整个类中都不变就得用enum(枚举) -
const成员函数:
这样的成员函数不可以修改数据成员,如果修改成员变量或者调用了其他非const成员函数就会报错。