Table of Content
本篇主要介绍 C++ 中的 this 指针。
关键字 this 就是一个指针,对于成员函数而言 this 指针指向调用对象的地址,而对于构造函数而言this指针指向正在被创建的对象的地址。
- 可以用于区分构造函数中成员变量名和行参名相同的情况(使用初始化列表例外)
this->m_name = m_name;
-
可以用于返回自引用的情况
-
可以作为函数的参数来实现对象间的交互
/*
this 指针用于区分构造函数中成员变量名和行参名相同的情况(使用初始化列表例外)this1.cpp
*/
#include <iostream>
#include <string>
using namespace std;
class Student {
private:
string m_name;//姓名
int m_age;//年龄
public:
//定义一个有参构造函数
Student(const string &name,int age):m_name(name),m_age(age) {
cout << "构造函数中:this = " << this << endl;
}
void show(void) {
cout << "构造函数中:this = " << this << endl;
cout << "我是" << m_name << ",今年" << m_age << "岁" << endl;
}
};
int main(void) {
Student s("张飞",30);
s.show();
cout << "main函数中:&s = " << &s << endl;
Student s2("关于",30);
s2.show();
cout << "main函数中:&s2 = " << &s2 << endl;
return 0;
}
/*
this 指针用于返回自引用的情况this2.cpp
*/
#include <iostream>
using namespace std;
class Counter {
private:
int m_count;
public:
//初始化计数值
Counter(int count = 0):m_count(count){}
//记数加1的成员函数
Counter& increase(void) {
m_count++;
//返回自引用
return *this;
}
//记数减1的成员函数
Counter& decrease(void) {
m_count--;
return *this;
}
//打印计数当前值
void show(void) {
cout << "当前计数值为" << m_count << endl;
}
};
int main(void) {
Counter c;
c.increase().increase().increase().decrease().show();
return 0;
}
/*
this 指针作为函数的参数来实现对象间的交互this3.cpp
*/
#include <iostream>
#include <string>
using namespace std;
class Student;
class Teacher {
private:
string m_answer;//保存老师的回答
public:
//给学生上课的函数
void educate(Student *ps);
/*{
ps->ask("什么叫this指针?");
cout << m_answer << endl;
}*/
//回答学生问题的函数
void replay(const string &str) {
m_answer = str;
}
};
class Student {
public:
//想老师提问的函数
void ask(const string &question,Teacher *pt) {
cout << question << endl;
pt->replay("this指针就是调用对象的地址!!");
}
};
Teacher::void educate(Student *ps) {
ps->ask("什么叫this指针?");
cout << m_answer << endl;
}
int main(void) {
Teacher t;
Student s;
t.educate(&s);
return 0;
}