前言
在c++ 中类内成员变量和成员函数分开存储
每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会公用一块代码
那么问题来了,这一块代码是如何区分哪个对象调用自己呢?
c++ 通过提供特殊的对象指针,this指针,解决上述问题,
his指针指向被调用的成员函数所属于的对象
his 指针是隐含每一个非静态成员函数内的一种指针
this 指针不需要定义,直接使用即可
正文
this 指针有什么作用
1. 解决名称冲突
先看看下面的代码有没有问题
#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Person
{
public:
Person(int age)
{
age = age;
}
int age;
};
void test()
{
Person p(18);
cout << p.age << endl;
}
int main()
{
test();
}
答案是有问题,person 的构造函数里面 age 出现冲突,怎么解决这个问题呢
#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Person
{
public:
Person(int age)
{
this->age = age;
}
int age;
};
void test()
{
Person p(18);
cout << p.age << endl;
}
int main()
{
test();
}
2.返回对象本身用 * this
我们先来看看下面的代码
#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Person
{
public:
Person(int age)
{
this->age = age;
}
void PersonAdd(Person& p)
{
this->age += p.age;
}
int age;
};
void test()
{
Person p(18);
Person p2(18);
p.PersonAdd(p2); // 正确的
p.PersonAdd(p2).PersonAdd(p2).PersonAdd(p2); // 错误的
cout << p.age << endl;
}
int main()
{
test();
}
那怎么让上面的代码变得正确呢
看看下面的代码文章来源:https://www.toymoban.com/news/detail-712546.html
#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Person
{
public:
Person(int age)
{
this->age = age;
}
Person & PersonAdd(Person& p)
{
this->age += p.age;
// this 指向的是 指向 自身的一个指针
return *this;
}
int age;
};
void test()
{
Person p(18);
Person p2(18);
p.PersonAdd(p2); // 正确的
p.PersonAdd(p2).PersonAdd(p2).PersonAdd(p2); //这种编程思想是链式编程思想
cout << p.age << endl;
}
int main()
{
test();
}
让 PersonAdd()这个函数设置返回值为 Person 类就可以啦(记得要设置的是引用,这样后续才能修改里的参数
看看运行的效果
文章来源地址https://www.toymoban.com/news/detail-712546.html
到了这里,关于c++ 学习 之 this 指针的学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!