1. this指针
1.1 this指针特性
- this指针的类型:类类型* const
- 只能在“成员函数”的内部使用
- this指针本质上其实是一个成员函数的形参,是对象调用成员函数,将对象的地址作为实参传递给this形参,所以对象中不存储this指针
- this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递的,不需要用户传递
- this->m_data = data或者写成(*this).m_data都是可以的
- this指针代表了当前对象的地址,一般情况下可以不用写this
- this指针存放在栈区,this指针不会为空
1.2 用法
class Test
{
public:
void setName(char* name)
{
strcpy(this->name,name);
//this->name = name;
}
void setAge(short age)
{
this->age = age;
}
char* showName()
{
return this->name;
}
short showAge()
{
return age;
}
//protected:
private:
char name[20];
short age;
};
int main()
{
Test t;
t.setAge(20);
t.setName("lixin");
char* arr;
arr = t.showName();
cout << t.showAge() << endl;
cout << arr << endl;
return 0;
}
1.3 面试题
1.this指针存在哪里?
void SetDate (Test* const this, int data)
在计算机中实际的成员函数是这样的,但是this这个指针的这个参数是隐藏的,不需要编程人员去写,也只是通过this指针才能识别不同对象调用相同的方法
2.this指针可以为空吗?
不可以,因为只有在类的成员函数中才存在this指针,而成员函数能调用肯定this指针也就不为空。
2. 常方法
2.1 写法
void setName(const char* name)
在常方法中,是不能修改值的,因此如果函数是不需要修改变量的值的情况下,最好加const。this指针其实就是使用了常方法进行定义的。