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类型的成员函数除外)。

  • 相关阅读:
    hdu 3333 树状数组+离线处理
    poj 2352 树状数组 OR Treap
    hdu 1698 线段树
    【概率dp】D. Card Collector
    【分段哈希】H. Paint the Wall
    【置换】G. Poker 2.0
    【概率dp】C. Race to 1 Again
    【dp】D. Caesar's Legions
    【并查集】F.find the most comfortable road
    【算法系列学习】连续邮资问题
  • 原文地址:https://www.cnblogs.com/lx09110718/p/constmutable.html
Copyright © 2011-2022 走看看