1. 一个对象占多大空间呢?
是由对象里面的成员变量决定的。
不在对象的内存里面,它在代码区。所有函数写完都在代码区,只有在调用的时候才去代码区找。既然函数不在对象里,那么函数里面的那个this指针代表当前对象是怎么回事???
3. 调用成员函数时,会自动传this指针
4. this指针是指向当前对象的指针
5. 在成员函数中,可以将this指针当参数传递,也可以返回this指针,或返回通过this指针拿到的对象
#include <iostream>
using namespace std;
//日期类
class Date{
int year,month,day;
// int x;
public:
//构造方法 初始化列表初始化成员变量
Date(int _y,int _m,int _d):year(_y),month(_m),day(_d){
}
#pragma 问题 --- -现在有个问题:参数名跟变量名一样,如何区分开哪个是参数哪个是变量???
/*
void set(int year,int month,int day){
//局部变量优先原则:在这里编译器会把参数year赋值给参数year。所以我们只需要告诉编译器哪个是当前对象的成员变量即可
year = year;
month = month;
day = day;
}
*/
void setValue(int year,int month,int day){
this -> year = year; //this -> year是成员变量 指针访问成员变量用箭头
this -> month = month;
this -> day = day;
// x = 800; //一般情况下用到成员变量 默认添加 this -> x
}
#pragma 问题 --- this 指针哪里来的?????
//把当前对象传进函数里面 显式显示出来了self指向当前对象
//同理this也是一样的,只要把self改成this即可,因为给this传的就是当前调用函数的那个对象
//这部分是编译器做的事情,编译器把这部分隐藏了
void setValue2(int year,int month,int day,Date* self){
self -> year = year;
self -> month = month;
self -> day = day;
}
#pragma mark- 调用函数的时候隐式的传一个Date* this指针进去。如果是OC里隐式传一个self指针
void test(){
this->year = 2002;
cout << "this保存的地址:" << this << endl;
}
void show();
};
//在.cpp里面写函数如果没有指定是哪个类的函数 那么它就是全局函数
#pragma 全局函数的调用 不需要对象去调用,也就没有当前对象了。没有当前对象那么void show(this)这里就不会传进this指针 如果没有this指针,就不知道hour变量到底是哪个对象的
/*
void show(){
cout << hour << "时" << min << "分" << sec << "秒" << endl;
}
*/
#pragma 如果是写成成员函数的话,那么就是通过对象去调用该函数。哪个对象调用的就把自己传进来,那么这个hour也就是调用函数的那个对象的hour .就像OC里面调用方法的时候里面传进一个self
//主函数
int main(){
Date d(2015,1,23);
#pragma 问题 --- 既然函数不在对象中,那么对象是怎么调用函数的???函数在代码区 函数名实际上是一个函数指针,指向代码区的一个函数。既然在代码区,那么那个this->year的this是哪出来的??
d.setValue(2018, 8, 8);
//this指向当前对象,意思是指向调用这个函数的对象 谁调用这个函数,this就指向当前对象
Date d2(2013,11,28);
d2.setValue2(2019, 8, 15,&d2);//虽然是成员函数,也是放在代码区的,等真正调用到的时候通过函数指针去代码区找到这个函数运行。而创建对象的那块内存空间并没有放函数
cout << "对象的地址: " << &d << endl;
d.test();//把当前对象自己 隐式地传进去 d.test(&d);只是这些事情是编译器做的,所以在函数当中我们能够拿到一个this指针
return 0;
}
对象的地址: 0x7fff5fbff830 this保存的地址:0x7fff5fbff830 Program ended with exit code: 0
原文:http://blog.csdn.net/love9099/article/details/43059191