zoukankan      html  css  js  c++  java
  • const类型成员函数与mutable

    const类型成员函数与mutable

    原文:http://houhualiang.i.sohu.com/blog/view/42619368.htm

     

    const类型的成员函数是指使用const关键字进行修饰的类的成员函数。const类型的成员函数对函数内部的操作加以一定的限制,比如不可以对对象的属性进行修改等,这样可以提高程序代码的正确性。 在使用关键字const对成员函数修饰的时候,将const放在成员函数的后面。在定义对象的时候,可以使用关键字const声明对象为常量对象。对于常量对象,如果使用非常量成员函数来操作,则会出现一个编译错误;同样,对于使用关键字volatile声明的对象, 如果使用非volatile类型的成员函数来操作,也会出现一个编译错误。 如果想修改const类型对象的成员变量,可以使用关键字mutable对该成员变量进行修饰。

     1 #include <iostream.h>
     2 #include <conio.h>
     3 class CDate
     4 {
     5    public:
     6    int year;
     7    mutable int month; // 使用关键字mutable进行修饰
     8    CDate(int y=2000,int m=1)
     9    {
    10       year= y;
    11       month= m;
    12    };
    13    int GetMonth() const; // 一个只读函数
    14    void SetMonth( int m ); // 一个写函数
    15 };
    16 int CDate::GetMonth() const
    17 {
    18    // 下面一行错误,故屏蔽掉
    19    // year++; // 但如果是month+ + ;则没问题
    20    return month; // 在只读函数中不可以进行改写操作
    21 }
    22 void CDate::SetMonth(int m)
    23 {
    24    month = m; // 设置月份
    25 }
    26 void main()
    27 {
    28    CDate d1;
    29    d1.Setmonth(9);
    30    d1.year=1975 ;
    31    cout<<"d1:"<<d1.year<<""<<d1.Getmonth()<<"";
    32    const CDate d2;
    33    d2.month=7;
    34    cout<<"d2:"<<d2.year<<""<<d2.Getmonth()<<"";
    35    // 下面一句错误,故屏蔽掉
    36    // d2.SetMonth(7); // 不可以对常量对象调用非常量成员函数
    37    // 下面一句错误,故屏蔽掉
    38    // d2.year=1973; // 不可以修改常量对象的成员变量
    39 }

    运行结果:
    d1:1975年9月
    d2:2000年7月

    说明:
    • 在上面的CDate类中,成员变量year为普通类型的变量,而成员变量month为mutable类型的成员变量,所以成员变量month不受const的约束,这可以从上面例程中的多个方面表现。
    • 在const类型的成员函数定义体中,不可以直接或间接地修改普通类型的成员变量(mutable类型的成员函数除外)。当对象被声明为const类型后,一般也不可以直接或间接地修改对象的成员变量( mutable类型的成员函数除外)。

  • 相关阅读:
    我爱Java系列之---【SpringBoot打成war包部署】
    279. Perfect Squares
    矩阵dfs--走回路
    112. Path Sum
    542. 01 Matrix
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    Invert Binary Tree
    563 Binary Tree Tilt
    145 Binary Tree Postorder Traversal
  • 原文地址:https://www.cnblogs.com/lx09110718/p/constmutable.html
Copyright © 2011-2022 走看看