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 }
原文地址:https://www.cnblogs.com/xiaochi/p/8591139.html