this用法
this指针理解 :
1. this指针的类型是 类类型* const (指针常量)
2. this指针并不是对象本身的一部分,不会影响sizeof的结果
3. this的作用域在类成员函数的内部
4. this指针是类成员函数的第一个默认隐含参数,编译器自动维护传递
5. 只有在类的非静态成员函数中才可以使用this指针
我们先看下面这个例子
- #include
- #include
- using namespace std;
- class Student {
- private:
- char* m_name;
- int m_age;
- float m_score;
- public:
- void setage(int m_age);
- //声明构造函数
- Student(char* name, int age, float score);
- //声明普通成员函数
- void show();
- };
- //定义构造函数
- Student::Student(char* name, int age, float score) {
- m_name = name;
- m_age = age;
- m_score = score;
- }
-
- // c++变量的作用域问题,函数形参跟你的变量重名,在函数内部,c++会仍然使用函数形参,也就是现在真正的类变量m_age是没有调用到的!
- void Student::setage(int m_age) {
- m_age = m_age;
- }
-
- //定义普通成员函数
- void Student::show() {
- cout << m_name << "的年龄是" << m_age << ",成绩是" << m_score << endl;
- }
-
-
- int main() {
- //创建对象时向构造函数传参
- string name = "李雷";
- Student stu((char*)name.c_str(), 5, 92.5f);
- stu.setage(10);
- stu.show();
- //创建对象时向构造函数传参
- string name1 = "韩梅梅";
- Student* pstu = new Student((char*)name1.c_str(), 15, 96);
- pstu->setage(20);
- pstu->show();
- return 0;
- }
-
-
- // 打印
- 李雷的年龄是5,成绩是92.5
- 韩梅梅的年龄是15,成绩是96
那么如何解决这个问题?
- #include
- using namespace std;
- class Student {
- private:
- char* m_name;
- int m_age;
- float m_score;
- public:
- void setage(int m_age);
- //声明构造函数
- Student(char* name, int age, float score);
- //声明普通成员函数
- void show();
- };
- //定义构造函数
- Student::Student(char* name, int age, float score) {
- m_name = name;
- m_age = age;
- m_score = score;
- }
- void Student::setage(int m_age) {
- this->m_age = m_age;
- }
- //定义普通成员函数
- void Student::show() {
- cout << m_name << "的年龄是" << m_age << ",成绩是" << m_score << endl;
- //cout<
m_name<<"的年龄是"<m_age<<",成绩是"<m_score< - }
- int main() {
- //创建对象时向构造函数传参
- string name = "李雷";
- Student stu((char*)name.c_str(), 5, 92.5f);
- stu.setage(10);
- stu.show();
- //创建对象时向构造函数传参
- string name1 = "韩梅梅";
- Student* pstu = new Student((char*)name1.c_str(), 15, 96);
- pstu->setage(20);
- pstu->show();
- return 0;
- }
-
- // 打印结果
- 李雷的年龄是10,成绩是92.5
- 韩梅梅的年龄是20,成绩是96
- #include
- using namespace std;
- class Student {
- private:
- char* m_name;
- int m_age;
- float m_score;
- public:
- void setage(int m_age);
- //声明构造函数
- Student(char* name, int age, float score);
- //声明普通成员函数
- void show();
- // 打印this的值
- void printThis();
- };
- //定义构造函数
- Student::Student(char* name, int age, float score) {
- m_name = name;
- m_age = age;
- m_score = score;
- }
- void Student::setage(int m_age) {
- this->m_age = m_age;
- }
- //定义普通成员函数
- void Student::show() {
- cout << m_name << "的年龄是" << m_age << ",成绩是" << m_score << endl;
- //cout<
m_name<<"的年龄是"<m_age<<",成绩是"<m_score< - }
-
- void Student::printThis() {
- cout << this << endl;
- }
-
-
- int main() {
-
- //创建对象时向构造函数传参
- string name1 = "韩梅梅";
- Student* pstu = new Student((char*)name1.c_str(), 15, 96);
- pstu->printThis();
- cout << pstu << endl;
- // const char *“ 类型的值不能用于初始化 “char *“ 类型的实体
- char *p = (char*)"张三"; //使用强制类型转换
- Student* pstu1 = new Student(p, 15, 96);
- pstu1->printThis();
- cout << pstu1 << endl;
- return 0;
- }
-
-
- // 打印输出
- 00FDFC90
- 00FDFC90
- 00FDFC58
- 00FDFC58