#include <iostream>
using namespace std;
class Person {
public:
void func() const {
// this指针的本质 是 指针常量 指针的指向是不可修改的
// 如果想让指针指向的值也不可以修改,需要声明常函数
// const Person* const this
// 在成员函数后面加const,修饰的是this指向,让指针指向的值也不可以修改
// this = NULL; // 该行报错,因为this指针在常函数中,指针不能改,指向的内容不能改
name = "张三";
}
void showValue() {
cout << age << endl;
}
mutable string name; // mutable(可变的) 特殊变量,即使在常函数中也可以修改
int age = 0;
static string address; // 静态成员变量,类内定义,类外初始化
};
string Person::address = "北京市朝阳区";
void test() {
const Person p;
// p.age = 18; // 常对象不能修改普通成员变量,但是可以访问
cout << p.age << endl;
p.name = "Jerry"; // 常对象可以修改被mutable修饰的成员变量
p.address = "北京市海淀区";
cout << p.address << endl; // 常对象可以访问并修改静态成员变量,
// 但是从本质上来说,静态成员变量不是普通成员变量
// 因为静态成员变量属于类,不属于对象,而成员变量属于对象
p.func(); // 常对象可以调用常函数
// p.showValue(); // 常对象不能调用成员函数,因为成员函数可以修改普通成员变量的值。
// 这与常对象不能修改普通成员变量的值相违背,所以不能调用
}
int main(){
test();
system("pause");
return 0;
}
C++ 常函数、常函数里的this指针、常对象
最新推荐文章于 2022-10-20 19:27:17 发布