C++知识7——静态、常量

静态

生存期:和程序的运行期相同。

1
2
3
static int a=9;//可以赋值
static int b;//默认b为0
static char a=0;//a的ascii码为0

虽然是静态但是还是限制于作用域,不会在其他作用域起作用。
全局变量具有静态生存期,具有静态生存期的初始值为0;

类的静态成员

类中的静态数据类型要放在类外
特例: 类的静态常量如果具有整数类型或枚举类型,可以直接在类定义中为它指定常量值。

1
2
3
4
5
6
class A{
private :
int x,y;
static int count;
};
int A::count=0;

类的静态函数成员

可以直接访问,通过类名::函数访问
静态成员函数可以直接访问类的静态数据和函数成员。而访问非静态成员必须通过对象名。
静态成员函数只能访问静态类型变量或静态函数。

const(符号常量)

声明一个普通符号常量语法:

1
2
3
const 类型 常量名=常量值;
//或者
类型 const 常量名=常量值;

一定要在声明时赋初始值,在程序过程中不能改变其值。
声明一个类类型的常量函数的语法:

1
2
3
4
5
6
7
8
9
class A{
public:
A(int i,int j):x(i),y(j){}
...
private:
int x,y;
};
const A a(3,4);
//const可以在前可以在A后,习惯在前

基本数据类型也可以看做特殊的类类型

成员函数和const(常成员函数)

语法:

1
类型说明符  函数名(参数表)const;
  • 声明时带关键字const
  • 如果一个对象说明为常对象,则通过常对象只能调用它的常成员函数,而不能调用其他函数(常对象只能调用常成员函数,不能调用非常成员函数;非常对象都可以调用,非常对象在调用常成员函数的时候,不改变值)
  • 无论是否通过常对象调用常成员函数,在常成员函数调用期间,目标都被视为常对象,因此常成员函数不能更新目的对象的数据成员,也不能针对目的对象调用该类中没有用const修饰的成员函数(即常成员函数不可以调用非常成员函数,不然会改变值)
  • const关键字可以用于对重载函数的区分
    提示:
    如果仅以const作为成员函数重载的区分,那么如果是一个非const调用函数,两个都可以与之匹配,编译器将选择最近的重载函数。

常数据成员

构造函数对常数据成员初始化时只能用成员初始化列表。常数据成员是在数据成员前添加const表征。

静态常数据成员

静态常数据成员在类外进行初始化。
特例 c++标准规定:
类的静态常量如果具有整数类型或枚举类型,可以直接在类定义中为它指定常量值。

常引用

常引用所引用的对象不能被更新。如果对常引用作为形参,就不会意外的发生对实参的更改
常引用可以绑定到常对象
使用引用的目的:节约时空(常引用),形参改实参(普通引用)

1
const 类型说明符 &引用名