C++中常函数
2023-12-19 07:04:41
常对象
格式: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; ?
常函数与非常函数中this指针的区别
在非常函数中:this指针是一个指针常量,指向不可以改变
在常函数中:this指针是一个常量指针常量,指向和指向里面的内容均不可以改变,这也就是为什么常函数里面不可以修改成员的是属性。
文章来源:https://blog.csdn.net/m0_75178021/article/details/135038351
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!