什么是类呢?类就相当于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(1995,12,2);
d2.FunTest(2000,8,18);
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指针不能为空
看一下代码分析: