1.常函数:
1.成员函数后加const后我们称为这个函数为常函数
2.常函数内不可以修改成员属性
3.成员属性声明时加关键字mutable后,在常函数中依然可以修改
代码案例演示常函数(注意注释):
#include<iostream>
using namespace std;
//常函数
class Person {
public:
//this指针的本质是指针常量,也就是指针的指向是不可修改的
//const Person * const this;
//这里的第一个const就是下面函数的const,这样指针指向的值也不可以修改了(this指针指向本身就不能改,这里是指向的值)
void showPerson() const {//这就是常函数
//隐含在每个成员函数里面都有一个this指针
//m_A = 100;//会报错,这段代码其实等同于this->m_A=100
//this = NULL;//也会报错,this指针是不可以修改指针的指向的
}
int m_A;
//如果还要能改加一个mutable特殊声明
mutable int m_B;//特殊变量,即使在常函数中,也可以修改值,加关键字mutable
};
void test01() {
Person p;
p.showPerson();
}
//常对象
int main() {
system("pause");
return 0;
}
2.常对象:
1.声明对象前加const称该对象为常对象
2.常对象只能调用常函数
常对象代码演示:
#include<iostream>
using namespace std;
//常函数
class Person {
public:
//this指针的本质是指针常量,也就是指针的指向是不可修改的
//const Person * const this;
//这里的第一个const就是下面函数的const,这样指针指向的值也不可以修改了(this指针指向本身就不能改,这里是指向的值)
void showPerson() const {//这就是常函数
//隐含在每个成员函数里面都有一个this指针
//m_A = 100;//会报错,这段代码其实等同于this->m_A=100
//this = NULL;//也会报错,this指针是不可以修改指针的指向的
}
void func() {//该函数并不是常函数
}
int m_A;
//如果还要能改加一个mutable特殊声明
mutable int m_B;//特殊变量,即使在常函数中,也可以修改值,加关键字mutable
};
void test01() {
Person p;
p.showPerson();
}
//常对象
void test02() {
const Person p;//在对象前面加上一个const,变为常对象
//同样的不可以修改值
//p.m_A = 100;//这段代码同样会报错
p.m_B = 100;//当然这个加了mutable,可以修改,不会报错
//常对象只能调用常函数
p.showPerson();
//p.func();//常对象,不可以调用普通成员函数,因为普通成员函数可以修改属性
}
int main() {
system("pause");
return 0;
}