zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    括号序列的dp问题模型
    粉刷匠
    木棍加工
    物流运输
    最短路图
    DP基础(线性DP)总结
    离散化
    树链剖分
    NOIP2016 “西湖边超萌小松鼠” 模拟赛
    NOI导刊 2009 提高二
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8591139.html
Copyright © 2011-2022 走看看