const 限定符修饰修饰变量声明时,被修饰的变量成为常量变量, 既具有常量性质的变量, 是“量”就要占据内存空间。
#define PI 3.14 //宏定义PI为3.14, PI在内存中部站有空间,在编译器编译的时候,编译器自动将PI替换成3.14。
const double PI = 3.14; //使用const限定符声明常量,由于常量不能作左值,所以要求声明常量的同时必须初始化常量。
const 特性:
const 限定符修饰函数的形参时,被修饰的形参在函数作用域内部不能作左值,
const 修饰变量:
const 修饰 指针:
使用指针变量做间接访问时,实际到两个变量,一个是指针变量,令一个是指针指向的变量。
使用const 限定符修饰指针变量声明时,可以将指针变量限定为常量,这时指针称为指针常量,他不能指向其他变量,
int a = 0;
int b = 1;
int * const p = &a; // const 限定符是向右结合的。
p++; //错误,指针常量不能做左值。
p = &b; //错误,指针常量不能做左值。
//声明指针常量的时候必须对指针进行初始化,
int a = 0;
const int * p;
p = &a; //正确,常量指针本身不是常量,可以作为左值。
a = 1;
*p = 1; // 错误,p是常量指针,作间接引用时不能做左值。
const修饰对象:
const 修饰的对象不能作为赋值表达式的左值,const对象的任意成员变量也不能被修改,const对象只能调用const成员函数。
const修饰函数:
const成员函数:在函数的参数列表后加入const ,如 int fun()const { }
相同函数名,相同参数列表的const成员函数和非const成员函数是重载的关系。
构造函数和析构函数没有const函数和非const函数之分。
===================================================================================================
static成员变量:
1、一个类只维护一套static成员变量, 即该类的所有对象共享一套static成员变量的副本。
2、c++允许用类名来直接访问static成员变量。
3、c++不能在构造函数的初始化列表中初始化static成员变量, 在构造函数内可以为static成员变量赋值(赋值不算初始化)。
4、静态常成员变量需要在全局域进行初始化。
5、类的非静态常成员变量需要在类的构造函数的初始化列表中初始化, 而静态常成员变量需要在全局域初始化。
static成员函数:
自定义类型“所有”对象只维护一套成员函数的副本。
1、static成员函数只能放分static成员函数和static成员变量(具体某个对象调用非static成员函数需向函数传递this指针,而调用static成员函数时不传递this指针。所以static成员函数可以使用类名调用,也可以使用对象、对象的指针、或对象的引用来调用)。
2、static成员函数存在的作用,是在类没有生成任何对象前,通过类名调用也可以访问该类的privat或是protected属性的static成员变量。
3、构造函数和析构函数不能作为static成员函数, static成员函数也没有const和非const的区分。
利用static 成员构建单间模式:
单件模式:(23种设计模式之一)是指设计只能产生一个对象的数据类型的方法。