this
this即位隐式的指针,指向调用者本身(对象的地址即为this)
所有的成元函数都隐式的含有一个this指针
细节点说明:
this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。
this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值。
举例说明:
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
class myclass{
public:
myclass()=default;
myclass(const string& ):str()
string sstring() const { return str; }
private:
string str;
};
int main(){
myclass m1("");
m1.sstring();
return 0;
}
// return *this; 返回当前对象
// return this; 返回当前对象的地址
- this 是一个指针,要用->来访问成员变量或成员函数
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
class my_class{
public:
int a=1;
void func(int );
};
inline
void my_class::func(int x)
{
x = this->a;
cout << x << endl;
}
int main()
{
my_class c;
return 0;
}
注意:(1)上图中子类对象调用的虚函数是子类的虚函数
(2)this 是 const 指针,它的值是不能被修改的,一切企图修改该指针的操作,如赋值、递增、递减等都是不允许的
(3)this 只能在成员函数内部使用,用在其他地方没有意义,也是非法的
(4)只有当对象被创建后 this 才有意义,因此不能在 static 成员函数中使用(后续会讲到 static 成员)
(5)
对象模型中的this指针
: 调用的过程示意如下
在这个过程中会发送动态绑定:
何谓动态绑定
- 指针(this)
- 向上转型
- 调用虚函数
(3)友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。