const修饰成员函数

const修饰成员函数

  • this指针的本质是一个指针常量,即this指针的指向不可以修改,但是指向对象内容可以修改。

  • 常函数

    (1)成员函数加 const 后为常函数,此时this指针实质上理解为const 类名 *const this。所以在常函数内不可以修改成员属性。

    (2)成员属性声明时加关键字 mutable 后,在常函数中依然可以被修改。

  • 常对象

    (1)声明对象前加 const 为常对象

    (2)常对象只能调用常函数

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<iostream>
using namespace std;
class Person {
public:
int m_Age;
mutable int m_B;//在常函数中也可以被修改
//Person *const this
void showClassName() {
this->m_Age = 10;
//this = NULL;报错
cout << "this is Person class" << endl;
}
//const Person *const this
void showPerson()const {
this->m_B = 10;
//this->m_Age = 10;//不可修改
//this = NULL;
cout << "age = " << m_Age << endl;
}
void func() {
}
};
void test01() {
//常对象只能调用常函数
const Person p;
//p.m_Age = 10;//报错
p.m_B = 10;
p.showPerson();
//p.func();//报错,常对象不可以调用普通成员函数,
}
void test02() {
Person p;
p.showPerson();//this指针指向p
}
int main() {
test01();
test02();
return 0;
}