C++中this指针的用法

this指针抽象比喻

    当我们在进入一个房子之后, 可以看见房子里的桌子,椅子、 地板等,但是看不到房子的全貌。对于一个类的实例来说, 你可以看到它的成员 函数、 成员 变量, 但是实例本身呢? this是一个指针, 它时时刻刻指向这个实例。

    一个对象的多个成员就可看作是这个对象所拥有的桌子,椅子、 地板等;而在很多个对象中间,我们为了证明某个成员是自己的成员,而不是其他对象的成员,我们同样需要给这些成员取上名字。在C++中,我们利用this指针帮助对象做到这一点his指针记录每个对象的内存地址,然后通过运算符->访问该对象的成员。

程序例程

   话不多说我们通过一个程序来体现this指针的实际用处:

复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string.h>

using namespace std;

class Student
{
public:
    void Initstudent(char* name, char* gender, int age)
    {
        cout << "this指针保存的地址为:"<< this << endl;
        strcpy(this->_name, name);
        strcpy(this->_gender, gender);
        this->_age = age;
    }

private:
    char _name[20];
    char _gender[15];
    int _age;
};
复制代码
int main()
{
    Student S1, S2, S3;
    cout << "当前对象S1地址为:" << &S1 << endl;
    S1.Initstudent("张三","boy",18);

    cout << "当前对象S2地址为:" << &S2 << endl;
    S2.Initstudent("李四","man", 101);

    cout << "当前对象S3地址为:" << &S3 << endl;
    S3.Initstudent("王五","lady", 20);
    getchar();
    return 0;
}
复制代码
复制代码

  结果显示如下:

   通过这个输出结果,我们可以看到,对象S1、S2、S3、的内存地址和this指针的地址分别是一模一样的。这就说明了this指针变量记录的是当前对象的内存地址,即this指针指向当前的对象!

      在程序里,我们就用了this指针的这个属性,即:this->i=x;这句话就表示把x的值赋值给当前的对象的私有成员函数i。

this指针特性详解 :

1、 this指针的类型  类类型* const

2、 this指针并不是对象本身的一部分, 不影响sizeof的结果。

3、 this的作用域在类成员 函数的内部(不严谨) 。

4、 this指针是类成员 函 数的第一个默认隐含参数, 编译器自 动维护传递,类编写者不能显式传递。

5、 只 有在类的非静态成员 函 数中 才可以 使用 this指针,其它任何函数都不可以 。

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

this指针的使用

   一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;

另外一种情况是当参数与成员变量名相同时,如this->n = n 。

转载于:https://www.cnblogs.com/tangshiguang/p/6735445.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值