一、常对象
1、常对象:它的数据成员值在对象的整个生存期间内不能被改变;也就
是说,常对象必须初始化,而且不能被更新;
声明常对象的语法形式:
const 类型说明符 对象名;
例如:class A
{ public :
A(int i,int j):x(i),y(j)
{}……
private :
int x;
int y;
};
const A a(1,2); //a是常对象,不能被更新
二、用const 修饰的类成员
1、常成员函数:
1)使用const关键字修饰的函数为常成员函数;
2)声明格式:
类型说明符 函数名(参数表) const;
**注 **:
1)这里的const 本质上修饰的是this指针;
2) const关键字可以用于对重载函数的区分;
3)在常成员函数中不能调用非常成员函数;
4)在非常成员函数中可以调用常成员函数;
5)常成员函数可以被常对象所调用,也可以被非常对象调用;
6)非常成员函数只能被非常对象所调用;
3)例如:
int i=88;
const intp=&i;
int q=&i;
p=q; //正确
q=p; //错误
注释:可以将非常指针赋给常指针;
但不可以将常指针赋给非常指针;
2、常数据成员:
1)使用const关键字修饰的数据成员;
2)如果在一个类中说明了常数据成员,那么任何函数都不能对该成员赋值
3)构造函数对常数据成员进行初始化,只能通过初始化列表;
4)类成员中的静态变量和常量都应在类定义之外加以定义;
5)类的静态常量如果是整型类型、枚举类型,那么可以直接在类定义时为
它指定常量值;
3、常引用:
1)如果在声明引用时用const 修饰,被声明的引用就是常引用,常引用的对
象不能被更新;
2)声明格式:
const 类型说明符 & 引用名
3)应用场景:当函数参数为引用时一般会加const关键字;
当函数参数不是引用而是对象时,会促发拷贝构造,而拷贝
构造会浪费时间;
4)类的拷贝构造函数的参数一般也采用常引用。
共享数据的保护
最新推荐文章于 2023-01-14 11:28:14 发布