首页 > 其他 > 详细

this指针

时间:2021-01-06 22:13:00      阅读:30      评论:0      收藏:0      [点我收藏+]

4、什么情况下需要手动加上this:

class Student
{
public:
    char name[50];
    int num;
    int age;

public:
    void set_age(int age)
    {
            age = age;
    };
};

大家看到了吗?set_age 函数的参数名字和成员变量的名字一样,都是age,那么这样的情况下,大家说说成员变量的age是否能真的赋值呢?大家不妨先把视频教程暂停,自己实践下,之后再继续播放教程!
不同的编译器可能实现的结果不同,但是在我们的vs2013中,答案是否定的。成员变量age并没有通过函数 set_age 被正确的赋值。那么这个时候怎么办呢?解决的方法是将 set_age 函数改成如下:

void set_age(int age)
{
    this->age = age;
};

5、小作业:
自己查找资料,详细说明this指针的作用域是哪里?

为什么引用this指针?

当我们在类中定义了一个变量,同时又在类成员函数中定义了同一个变量时,也就是变量名重复时,但是我们要想使用类中的定义的变量,此时就需要this指针了。

1.this指针的作用

指针存在于类的成员函数中,指向被调用函数类实例的地址。

 一个对象的this指针并不是对象本身的一部分,不会影响sizeof()的结果。

this指针的作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。换句话说就是,及时你没有用this指针,编译器在编译的时候也会自动加上this的,它是一个隐含形参,对各成员的访问均通过this进行。

2.this指针的使用

(1)在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;

(2)当参数与函数成员变量名相同时,应使用 this.age = age;

3.this指针的特点

 (1)this指针只能在成员函数中使用

          全局函数,静态函数都不能使用this指针,其实,成员函数的第一个默认参数是 *const  this

例:class Student()

{

int fun(int x)

{

}

};

函数fun(int x)的原型在编译器看来就是 fun(Student *const this ,int x)

 (2)this 指针在成员函数的开始前构造,在成员函数的结束后清除,生命周期和其他函数参数一样。当调用一个类的成员函数时,编译器将类的指针作为函数的this参数传递进去。

如:Student stu;

stu.fun(3);

此时编译器会编译成:

Student::fun(&x,3);

(3)this指针会因编译器不同而有不同的放置位置。可能是栈,也可能是寄存器,甚至全局变量。

在汇编级 别里面,一个值只会以3种形式出现:立即数、寄存器值和内存变量值。不是存放在寄存器就是存放在内 存中,它们并不是和高级语言变量对应的。

 

this指针

原文:https://www.cnblogs.com/SakuraQAQ/p/14241966.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!