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进行投诉反馈,一经查实,立即删除!