精华内容
下载资源
问答
  • this指针

    2018-10-18 17:18:29
    this指针

    this指针

    首先定义一个类看,对象调用成员函数情况

    class Date
    {
    public :
    	void Display ()
    	{
    		cout <<_year<< "-" <<_month << "-"<< _day <<endl;
    	}
    private :
    	int _year ;
    	int _month ;
    	int _day ;
    };
    

    定义一个对象A然后调用成员函数时是 A.Display (),成员函数也是一个函数,那么它是如何访问成员变量的?
    实际上成员函数参数列表的第一个形参是一个隐含的this指针
    void Display() -------> void Display(Date * this)

    这个隐含的this指针具有以下特性:

    1. this 指针是只能在 class、struct或 union 类型的非静态成员函数中访问的指针。 它指向为其调用成员函数的对象。 静态成员函数没有 this 指针。
    2. 通过对象调用成员函数时编译器会将该对象的地址作为实参传给this指针
    3. this指针不能显示的定义,也不能在调用时显示将对象的地址作实参传递给this指针, 但是可以在函数体内显示的调用this指针如:cout << this->_year<< “-” << this->_month << “-”<< this->_day <<endl;

    this指针的类型

    [cv-qualifier-list] class-type * const this

    this指针默认是const指针表示其不能重新指派,cv-qualifier-list 是从成员函数声明符中确定的,可以是 const 和/或 volatile, class-type 是类的名称,即成员函数声明中使用的 const 或 volatile 限定符适用于由该函数范围中的 this 指向的类对象。

    class Point  
    {  
        unsigned X() const;  
    };  
    

    成员函数X中的this 指针类型变为const Point * const this 即指向 const 对象的 const 指针
    const 不能更改数据成员;无法调用不是 const 的成员函数。因为非const对象不能指向const对象
    volatile 每次访问成员数据时,都会从内存中加载该数据;禁用某些优化。

    展开全文
  • this 指针

    2019-10-22 20:02:34
    C++this指针,一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。 this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候, 编译器会自动将对象本身的地址作为一个隐含...

    什么是 this 指针?

    C++this指针,一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。
    this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,
    编译器会自动将对象本身的地址作为一个隐含参数传递给函数。
    this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,
    指向被调用函数所在的对象。全局仅有一个this指针,当一个对象被创建时,this指针就存放指向对象数据的首地址。

    this 指针特性

    1 this指针是类 类型的指针 ,它不可修改;
    2 只能在成员函数的内部使用;
    3本质是成员函数的形参,形参不存储,所以不会影响成员函数的大小sizeof()
    4 this 指针是成员函数隐藏的第一个指针形参

    this 指针的传递(由编译器来维护)
    :————————this call约定1成员函数调用约定 – ---->ecx寄存器传递
    : ———————— 2 cdecl 约定——————————>this指针压栈(push)

    this 指针不能修改;

    1 this 指针存在哪里?

    this指针无需显式储存内存中。只要存储对象的内存位置确定,对应的this指针就被确定了。
    所以, 不存在所谓的this的“位置”,只是this表示了对象的存储位置而已。
    &this违反语义规则,是错误的用法,不会编译通过。

    2 this指针指向可以为空吗 ?this 指向NULL?

    答案是 this指针 完全可以为空 ,调用成员函数时,如果访问“成员变量" ,程序一定崩溃(因为成员变量通过this指针访问),不访问成员变量时就不会崩溃;

    3 编译器 怎么识别类?

    1 先识别类名
    2 识别类中成员变量
    3 类的 功能(识别成员函数,并对成员函数进行改写 (1 ,this) );·

    #1:this指针是什么时候创建的?

    this在非静态成员中有意义,作为右值可以直接在编译时确定其存在,运行时无所谓创建。

    #2:this指针存放在何处?堆,栈,全局变量,还是其他?

    由上一问可知,this指针无需显式储存内存中。只要存储对象的内存位置确定,对应的this指针就被确定了。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,346
精华内容 6,538
关键字:

this指针