C++中常函数

本文介绍了常对象的特性,包括其成员变量不可修改和只能调用常函数。常函数与非常函数在this指针的使用上有区别,且在对象为常对象时,非常函数优先调用。还讨论了函数重载和常函数中的mutable修饰符的应用。
摘要由CSDN通过智能技术生成

常对象

格式: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指针是一个常量指针常量,指向和指向里面的内容均不可以改变,这也就是为什么常函数里面不可以修改成员的是属性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值