this指针
this指针含义及用法:
1、this指针是指向每一个成员函数的特殊指针,当不同的对象调用同一个类的成员函数代码时,编译器会依据该成员函数的this指针所指向的不同对象来确定应该引用哪个对象的数据成员;
2. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针;
3. 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值; 在X类的const成员函数中,this指针的类型为:const X* const, 这说明this指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作);
4. 由于this并不是一个常规变量,所以,不能取得this的地址。
5. 在以下场景中,经常需要显式引用this指针
(1) 为实现对象的链式引用;
(2) 为避免对同一对象进行赋值操作;
(3) 在实现一些数据结构时,如list。
this指针特性:
1、this指针的类型 类类型* const;
2、this指针并不是对象本身的一部分,不影响sizeof的结果;
3、this的作用域在类成员函数的内部;
4、this指针是类成员函数的第一个默认隐含参数,编译器自动维护传递,类编写者不能显式传递。
例:
#include
using namespace std;
struct Date
{
int _year;
int _month;
int _day;
};
void SetDate(Date* _this, int year, int month, int day)
{
_this->_year = year;
_this->_month = month;
_this->_day = day;
}
void PrintDate(Date* _this)
{
printf("%d-%d-%d\n", _this->_year, _this->_month, _this->_day);
}
int main()
{
Date d;
SetDate(&d, 2016, 9, 27);
PrintDate(&d);
system("pause");
return 0;
}
构造函数
是一个特殊的成员函数,名字与类名相同,创建类类型对象时,由编译器自动调用,在对象的生命周期内只且只调用一次,以保证每个数据成员都有一个合适的初始值。类如果没有显式定义构造函数时,编译器会合成一个默认的构造函数。编译器生成的默认构造函数使用与变量初始化相同的规则来初始化成员,具有类类型的成员通过运行各自的构造函数来进行初始化。
构造函数特性:
1、函数名与类名相同。
2、没有返回值。
3、有初始化列表(可以不用)。
4、新对象被创建,由编译器自动调用,且在对象生命期内仅调用一次。
5、构造函数可以重载,实参决定了调用那个构造函数。
6、如果没有显式定义时,编译器会提供一个默认的构造函数。
7、无参构造函数和带有缺省值的构造函数都认为是缺省构造函数,并且缺省构造函数只能有一个。
2、没有返回值。
3、有初始化列表(可以不用)。
4、新对象被创建,由编译器自动调用,且在对象生命期内仅调用一次。
5、构造函数可以重载,实参决定了调用那个构造函数。
6、如果没有显式定义时,编译器会提供一个默认的构造函数。
7、无参构造函数和带有缺省值的构造函数都认为是缺省构造函数,并且缺省构造函数只能有一个。
8、构造函数不能用const修饰。
构造函数作用:
1、构建对象
2、初始化对象
3、类型转换
2、初始化对象
3、类型转换
初始化列表
:以一个冒号开始,接着一个以逗号分隔的数据列表,每个数据成员后边跟一个放在圆括号里的初始化表达式。
初始化顺序:①每个成员在初始化列表中只能出现一次;
②尽量避免用成员初始化成员;
③初始化顺序按数据成员在类中定义顺序。
注:若类中包含另一个类,若子类没有缺省的构造函数,则类的构造函数初始化时须对子类对象进行初始化(在初始化列表中初始化)。
有问题的话大家一定要给我说哦!