const 数据成员 —— const 成员函数 —— const 类对象

1、const 数据成员

        在数据成员之前加const修饰符。

        const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,位于*左边是底层const,位于*右边是顶层const。

2、const 成员函数

        类的成员函数后面加 const。void fun() const {}(指 const 放在函数参数表的后面,而不是在函数前面或者参数表内)

        表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const。所以 const 关键字对成员函数的行为作了更加明确的限定:

        (1) 有 const 修饰的成员函数,只能读取数据成员,不能改变数据成员;没有 const 修饰的成员函数,对数据成员则是可读可写的。

        (2) 除此之外,在类的成员函数后面加 const 还有什么好处呢?那就是 const 对象 只可以调用 const 成员函数,而不能调用非const修饰的函数。

        (3) const成员函数可以重载同名同参的非const成员函数。

        (4) 非const成员函数 只可访问 非const对象 的任何成员,不能访问 const对象 的任何成员;

             const成员函数 可以访问 const对象/非const对象 的任何成员。

        非const成员函数 this指针类型 是 Data * const this,          this 是常量指针,                  顶层const,不可接受常量对象。

        const成员函数     this指针类型 是 const Data * const this,this 是指向常量的常量指针,顶层const+底层const。

//非const成员函数
void fun()
{
}
void fun(Data const* this)           //不能接受 const对象
{
}

//const成员函数
void fun() const
{
}
void fun(const Data const* this)     //可以接受 cosnt对象
{
}

        const修改了this指针的类型,解释参考《C++ primer》231.

3、const 对象

        在类的对象定义之前加const修饰,const Data data;

        (1) const对象 只能调用 const成员函数,非const对象 无限制。

        (2) const对象 不能被 非const成员函数 访问,只能被 const成员函数 访问。

参考链接:

https://www.cnblogs.com/cthon/p/9178701.html

你可能感兴趣的:(C++)