常对象
格式:const 类 对象;
性质:
1.常对象里面的成员变量的值不能修改
2.常对象只能调用常函数
3.非常对象优先调用非常函数,若无非常函数,再调用常函数
常函数
格式:在成员函数的后面加上一个const
void get_nums() const { this->a = 2; }
性质:
1.常函数只能再类中定义,出了类定义是错误的
2.常函数中不能修改成员变量的值,也不能调用非常函数
3.如果有俩个函数,它的函数名和参数均相同,什么情况下会发生函数重载?
在这俩个函数一个是常函数,一个是非常函数的时候会发生函数重载,因为编译器会根据对象是否是常对象,来调用不同的函数。
4.成员变量在声明的时候前面加mutable,可以在常函数中修改其值
#include <iostream> using namespace std; class Person { mutable int a; char b; public: Person() { cout << "构造函数" << endl; } ~Person() { cout << "析构函数" << endl; } void get_nums() { this->a = 2; } void get_nums() const { this->a = 2; } void get_nums2() {//非常函数 //this指针是一个指针常量-->Type* const this(指向不能改变,但是可以修改里面的内容) a = 2; } void get_nums2cst() const {//常函数 //this指针是一个常量指针常量-->const Type* const this (指针的指向和指向对象里面的内容都不可以改变) a = 2;//常函数,不能修改成员变量的值 } }; void show() const {//常函数只能再类中定义 //错误! } int main() { Person p1;//非常对象 const Person p2;//常对象-->对象里面的成员变量的值不可以修改 p1.get_nums2();//非常对象调用非常函数 p1.get_nums2cst();//非常对象调用常函数 p2.get_nums2cst();//常对象调用常函数 p2.get_nums2();//常对象不可以调用非常函数 /* * 总结:常对象只能调用常函数,非常对象优先调用非常函数,没有非常函数再调用常函数 */ p1.get_nums(); p2.get_nums();//函数的重载,编译器可以通过调用对象的不同来区分调用常函数还是非常函数 return 0;