C++之const常量

 

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种设计模式之一)是指设计只能产生一个对象的数据类型的方法。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值