C++this指针、常函数

this指针

  1. this指针的类型:类类型* const。不能被修改和赋值。

  2. 只能在成员函数的内部使用。全局函数、静态函数都不能使用this.

  3. this指针本质上其实是一个成员函数的形参(栈),是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。

  4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递。

  5. this在成员函数的开始前构造,在成员函数的结束后清除

    6.this指针并不是对象一部分,不影响sizeof 结果,它的作用域一般在类成员函数内部。

成员函数如何区分调用它的对象-使用隐藏的this指针

1、对象的内存只存储了成员变量,没有存储成员函数指针,相当于所有的对象调用的是同一份成员函数

2、当对象调用成员函数时,编译器会自动把对象的地址传递给该成员函数,也能就是说,普通成员函数都有一个隐藏的参数,该参数名字叫做this指针 ,this指针用来接收调用对象的地址

3、this指针拿到调用对象的地址后可以直接访问该对象的成员,从而完成区分对象的任务

4、虽然this指针是隐藏定义的,但是可以显示地使用它,但不要多此一举地显示定义它

常函数

1、被const修饰了this指针的成员函数,称为常函数(只能访问)

2、当对象调用成员函数时,编译器会隐式地把对象地址传递给成员函数

3、当对象被const修饰过具有常属性,就不能直接调用普通的成员函数,因为传递的对象地址也具有了常属性,而普通成员函数的this指针参数不具备常属性,所以编译器会报错,C++编译器不允许用带常属性的指针数据给不带常属性的变量赋值

4、因此需要让成员函数中的this也具备常属性,通过const修饰变成常函数,所以const修饰的是this指针,这样就可以让具有常属性的对象调用常函数

    返回值 类名:: 成员函数(参数列表)const
    {
        //常函数
    }

5、具有常属性的对象只能调用常函数,常函数也只能调用常函数;不具备常属性的对象都可以调用

6、同名的成员函数,如果其他的参数列表完全相同,但是属性不同,也可以构成重载

7、正常来说在常函数中不能修改成员变量,除非该成员在定义时通过mutable修饰

posted @   冲他丫的  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示