83.const与类
- const常量对象,无法改变数据,只能引用尾部带const方法
- 类的成员如果是const,可以默认初始化,也可以构造的初始化,不可在构造函数内部初始化
- 类中的const成员,无法直接修改,可以间接修改
- 类的成员函数const三种情形:1.返回值const,2.返回常量,3.参数const,可读不可写,尾部const,常量对象可读不可以写,变量可以访问
- const不适用于构造与析构
- mutable不受const锁定
代码示例
1 #include <iostream> 2 using namespace std; 3 4 //创建对象的时候,const常量对象,无法改变数据,只能引用尾部带const方法 5 //类的成员如果是const,可以默认初始化,也可以构造的初始化,不可在构造函数内部初始化 6 //类中的const成员,无法直接修改,可以间接修改 7 //类的成员函数const三种情形:1.返回值const,2.返回常量,3.参数const,可读不可写,尾部const,常量对象可读不可以写,变量可以访问 8 //const不适用于构造与析构 9 10 11 class myclass 12 { 13 public: 14 int x; 15 int y; 16 //如果有常量构建的时候必须初始化,或者默认初始化 17 const int z; 18 19 myclass(const int a):z(a) 20 { 21 } 22 23 //后面加const表明不改变原生数据 24 void show() const 25 { 26 cout << z << endl; 27 } 28 29 //保护参数不被修改 30 void change(const int a,const int b) 31 { 32 x = a; 33 y = b; 34 } 35 36 const int getx() const //返回一个常量,函数有保护作用 37 { 38 return x; 39 } 40 }; 41 42 //内部const 43 void mai1n() 44 { 45 //常量对象,只能调用带const的方法,无法修改数据 46 const myclass my1(1); 47 //声明为const不能随意修改 48 //my1.x = 20; 49 //间接修改类中的const变量 50 int *p = const_cast<int *>(&my1.z); 51 *p = 10; 52 my1.show(); 53 54 cin.get(); 55 } 56 57 //外部const 58 59 class myclass2 60 { 61 public: 62 int x; 63 int y; 64 int z; 65 66 //可以在const函数中改变,不被const锁定 67 mutable int time; 68 69 myclass2(int a = 10, int b = 10, int c = 10) :x(a), y(b), z(c) 70 { 71 72 } 73 74 void show() const 75 { 76 time = 3; 77 cout << x << y << z << endl; 78 } 79 80 void set(int a,int b,int c) 81 { 82 x = a; 83 y = b; 84 z = c; 85 } 86 }; 87 88 void main() 89 { 90 //这个对象不能改变数据 91 const myclass2 my(1, 2, 3); 92 const myclass2 *p = new myclass2(4, 5, 6); 93 94 //不能改变指针的指向 95 myclass2 *const p2 = new myclass2(1, 23, 4); 96 //既不能改变指向也不能改变数据 97 const myclass2 *const p3 = new myclass2(1, 2, 3); 98 p2->show(); 99 }