11.3.4重学C++之【const修饰成员函数】

#include<stdlib.h>
#include<iostream>
#include<string>
using namespace std;


/*
    4.3.4 const修饰成员函数
        常函数:成员函数后加const(修饰的是this指针,令指针指向的值也不可修改)
            常函数内不可修改成员属性
            成员属性声明时加关键字mutable后,在常函数中依然可以修改
        常对象:声明对象前加const
            常对象只能调用常函数
*/


class Person{
public:
    int a;
    mutable int b;

    Person(){

    }

    void show_person(){
        a = 100;
        this->a = 100;
         // this指针是隐含每一个非静态成员函数内的一种指针,其不需定义,课直接使用
        // this指针的本质是指针常量,故该指针的指向不可修改
        // 在test()案例中,该this指针:Person * const this,其指向p
    }

    /*
    void show_person()const{ // 常函数
        a = 100; // 报错
        this->a = 100; // 报错
        // 此时 this:const Person * const this
    }
    */

    void show_person1()const
    {
        b = 100; // ok
        this->b = 200;
    }
};


void test(){
    Person p;
    p.show_person();
    p.show_person1();
}

void test2(){
    const Person p1; // 常对象
    //p1.a = 100; // 报错
    p1.b = 300; // ok

    //p1.show_person(); // 报错
    p1.show_person1(); // ok 常函数
}


int main(){
    test();
    test2();

    system("pause");
    return 0;
}

 

posted @   yub4by  阅读(18)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示