类之this指针

什么是类呢?类就相当于c语言中的结构体一样~
类将一组具有相关性数据包装在一体,这些数据称为类的成员变量或属性。
下面给出类的一般定义:

class ClassName //类名字
{
   //类实现体
};
class为类的关键字,ClassName为类的名字,{}为类的主体,**尤其注意类定义结束后有个分号**

今天我们主要来介绍一下类里面的this指针~
什么是this指针呢???我们通过一段代码来解析一下。。。。
下面给出代码

#include<iostream>
using namespace std;
class CDate//类名
{
public://定义公有成员,在类外可以直接访问
    void FunTest(int _year,int _month,int _day)//类的成员函数FunTest
    {
        year = _year;
        month = _month;
        day = _day;
    }
    void Print()//类的成员函数 Print
    {
        cout << year<< endl;
    }
private://定义公有成员,在类外不可以直接访问
    int year;
    int month;
    int day;
};

int main()
{
    CDate d1, d2;//创建类的两个对象
    d1.FunTest(1995122);
    d2.FunTest(2000818);
    d1.Print();
    d2.Print();
    system("pause");
    return 0;
}

如上代码,创建两个对象d1和d2。
我们可以看到:
d1.FunTest使函数FunTest与对象d1绑定;
d2.FunTest使函数FunTest与对象d2绑定;
类成员函数的形参和类的属性,名字相同;
那么而不同对象可以实现不同数据的操作这是怎么实现的呢????

对于一个类来的实例来说,你可以看到她成员函数,成员变量,但是看不到实例本身。。。
this是一个指针,它时时刻刻指向这个实例~
也就是说,揭开这个谜团的就是这个this指针,那么它是如何做到的呢???
请看一下图解:
这里写图片描述

this指针并不是对象本身的一部分,所以不影响sizeof的结果~
下面我们来看一下this指针的其他一些特性~

将上述代码改为以下代码,编译器不会出错

void FunTest(int _year)
    {
        this->year = _year;
    }

特性一:this指针是类成员函数的第一个默认隐含参数,编译器自动维护传递~

如果this指针是非const指针,那么意味着在它被赋值为对象地址后可以被赋值为空。否则,则为const指针。

这里写图片描述

特性二:this指针的类型是 类类型* const

最后我们再来看一下_thiscall调用约定
这里写图片描述
特性三:this指针不能为空
看一下代码分析:
这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值