const成员变量与成员函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CY071512/article/details/79698971

1. const成员变量

 const修饰的成员变量只能用构造函数初始化列表进行初始化,不能进行赋值初始化,引用和const一样,只能在初始化列表进行初始化。

class Date
{
private:
    int _year;
    int _month;
    const int _day;//声明const变量
public:
    Date(int year=1990,int month=1,int day=1)
    :_year(year),
    _month(month),
    _day(day)
    {
        //_day=day;//error,试图给const类型变量赋值
    }
};

  初始化列表先于构造函数的函数体执行,且初始化顺序和成员变量的声明顺序相同的。  


2. const成员函数

  在成员函数后面加const,const修饰this指针所指向的对象,保证调用这个const成员函数期间对象在这个函数内不会改变。几点规则:


  1. const成员函数不能调用其他的非const成员函数,非const成员函数可以调用const成员函数
  2. const成员函数可以访问对象的所有成员变量
  3. 非const对象可以调用非const成员函数也可以调用const成员函数
  4. const对象只能调用const成员函数,也就是说,const成员函数是const对象的唯一对外接口

class Date
{
private:
    int _year;
    int _month;
    const int _day;//const 成员变量只能用初始化列表初始化,引用也一样,因为两者只能初始化不能定义
public:
    Date(int year = 1990, int month = 1, int day = 1)
        :_year(year),
        _month(month),
        _day(day)
    {
        //_day = day;//试图给const成员变量赋值。错误,只能初始化
    }
    void Show() //const
    {
        /*cout << _year << "-" << _month << "-";
        cout << _day << endl;*/
        cout << "Show()" << endl;
        Date::show();//非const成员函数可以调用const成员函数
    }
    void show() const
    {
        cout << "const show()" << endl;
        //Date::Show();//const成员函数不能调用其他的非const成员函数
    }
};
void Test()
{
    Date d1;//非const对象既可以调用非const成员函数也可以调用const成员函数
    d1.Show();
    d1.show();
    const Date d2;//const对象只能访问const成员函数,const成员函数是常对象对外的唯一接口
    d2.show();
}

猜你喜欢

转载自blog.csdn.net/CY071512/article/details/79698971