(1)先补充一个知识点,关于拷贝函数的本质
拷贝构造函数是一种特殊的构造函数,用于创建一个新对象,该对象是另一个同类型对象的副本。它返回的是新创建的对象,也就是对原对象的拷贝。
public:
// 拷贝构造函数
ClassName(const ClassName& other) {
// 进行成员变量的拷贝
}
};
这里的 other 是已存在对象的引用,拷贝构造函数会把 other 的成员变量值复制到新创建的对象里。
(2)来到重点关于this指针的用途,this指针指向被调用的成员函数所属的对象
1:this指针是隐含每一个非静态成员函数内的一种指针
2:this指针不需要定义,直接使用即可
【1】用途一,当形参和成员变量重名时,可以用this指针来区别
错误代码
using namespace std;
class person{
public:
person(int age){
age=age;
}
int age;
};
void test01(){
person p(18);
cout<<p.age<<endl;
}
int main()
{
test01();
return 0;
}
正确代码
using namespace std;
class person{
public:
person(int age){
this->age=age;
}
int age;
};
void test01(){
person p(18);
cout<<p.age<<endl;
}
int main()
{
test01();
return 0;
}
【2】用途二,返回对象本身用*this
using namespace std;
class person{
public:
person(int age){
this->age=age;
}
int age;
person& personadd(person& p){
this->age+=p.age;
return *this;//返回的是调用这个函数的对象
}
};
void test01(){
person p(10);
cout<<p.age<<endl;
person p2(10);
p2.personadd(p).personadd(p).personadd(p);
cout<<p2.age<<endl;
}
int main()
{
test01();
return 0;
}
****1:首先:如果拷贝函数的返回类型为person那么将不会累加,因为拷贝构造函数每次都会拷贝一个新的对象所以,不会实现累加,最后的结果是20
2:其次:this返回的是调用这个函数的对象***