C++ this指针和构造函数(-)
来源:互联网 发布:mac 退出dashboard 编辑:程序博客网 时间:2024/05/18 02:03
/一.this 指针:
特点:
this指针的类型是: 类类型*const
this指针并不是对象本身的一部分,不影响sizeof的结果
只能在成员函数中用(后面还有补充)
this指针式类成员函数的第一个默认隐含参数,编译器自动维护传递~
classDate
{
public:
voidSetDate(intyear,intmonth,intday)
{
_year = year;
_month = month;
_day = day;
}
voidPrintDate()
{
cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
}
private:
int_year;
int_month;
int_day;
};
转到反汇编:
_year = year;
00D91613 mov eax,dword ptr [this] //将this放入eax寄存器
00D91616 mov ecx,dword ptr [year]
00D91619 mov dword ptr [eax],ecx
_month = month;
00D9161B mov eax,dword ptr [this]
00D9161E mov ecx,dword ptr [month]
00D91621 mov dword ptr [eax+4],ecx
_day = day;
00D91624 mov eax,dword ptr [this]
00D91627 mov ecx,dword ptr [day]
00D9162A mov dword ptr [eax+8],ecx
intmain()
{
Date d1, d2, d3;
d1.SetDate(2016, 9, 25);
d2.SetDate(2016, 9, 26);
d3.SetDate(2016, 9, 24);
d1.PrintDate();
d2.PrintDate();
d3.PrintDate();
cout<<sizeof(Date)<<endl;
return0;
}
//class Date//{//public://void SetDate( Date* const this,int year, int month, int day)//this指针是类成员函数的第一个默认隐含参数,编译器自动维护传递, 类编写者不能显式传递。//// //{//this->_year = year;//this->_month = month;//this->_day = day;//}//private://int _year;//int _month;//int _day;//}
_thiscall调用约定:
参数从右向左压栈
只能在类的成员函数上*/
//二
构造函数://定义:是一个特殊的成员函数,名字与类名相同,创建类类型对象时,由编译器自动调用,在对象的周期内只调用一次。//特点:可以重载。// 无返回值,// 名字与类名相同 // 有初始化列表(可以不用,但是类里面的const和引用必须在初始化列表里面初始化!还有A类包含B类的对象,若B的对象不是缺省的构造参数,则也必须在初始化 // 列表里面初始化);//构造函数可以重载//class Data//{//public://Data()//{//}//Data(int year,int month,int day)//构造函数可以重载//{//_year = year;//_month = month;//_day = day;//}//Data(int year,int month)//构造函数可以重载//{//_year = year;//_month = month;//}//private://int _year;//int _month;//int _day;//};//void Fun()//{////}//int main()//{////Data t1(2016,13,25);//Data t2(2016,15);// Data t3();////return 0;//}
//三//初始化列表:// 以一个冒号开始,接着是一个以逗号分隔的数 据成员列表,每个数据成员后面跟一个放在园括号中的初始化式。// //【初始化顺序】// 1、每个成员在初始化列表中只能出现一次。// 2、初始化列表仅用于初始化数据成员,并不指定这些数据//成员的初始化顺序,// 数据成员在类中定义顺序就是在参数列表中的初始化//顺序。// 3、尽量避免使用成员初始化成员,成员的初始化顺序最好//和成员的定义顺序保持一致。//避免出错!//初始化参数列表//class Data//{//public://// Data ()//// :_year(1),_month(2),_day(1)////////{//// }// Data (int year)// :_year(1),_month(2),_day(1),ra(year)////{// }////void PrintDate()//{//cout<<_year<<"-"<<_month<<"-"<<_day<<endl;//}//private://int _year;//int _month;////int _day;//const int _day;//必须在构造函数基/成员初始值设定项列表中初始化//int &ra;//必须在构造函数基/成员初始值设定项列表中初始化//};//void Fun()//{//Data t;//t.PrintDate();////}//int main()//{//Fun();//getchar();//return 0;//}
0 0
- 【C++】This指针和复制构造函数
- C++ this指针和构造函数(-)
- 构造函数和this指针
- this指针和构造函数
- c++::让你足够了解构造函数和this指针
- c++::让你足够了解构造函数和this指针
- 构造函数和this指针浅谈
- this指针 构造函数
- 构造函数中的this指针
- this指针与构造函数
- 构造函数与this指针
- 构造函数和This
- 构造函数和this
- C++(typedef、一维数组转成二维数组、C和C++区别、成员地址成员指针、构造析构函数、this指针、const用法、显示时间、const用法)
- C++构造函数中的this指针
- 当构造函数泄露this指针时
- 构造函数相互调用使用this指针
- C++(4)/new delete & static & this指针 & 全局函数和成员函数
- 单链表的输入和输出(c语言编写)
- Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果
- Java并发编程:volatile关键字解析
- HTML5 的message的使用
- 小回顾-比较完善的学生简易管理系统
- C++ this指针和构造函数(-)
- 第26周-window程序设计(基础篇)-第5章(图形基础)-贝塞尔曲线BEZIER.C
- BigDecimal用法详解
- Java基础知识总结(绝对经典)
- odoo9.0---ORM API
- 空闲时间学一个Linux命令(3)——pwd命令
- 美团数据库运维自动化系统构建之路
- 51Nod-1478-括号序列的最长合法子段
- Mysql下GROUP_CONCAT使用