这指针

  

1, c++中在实例化对象之后:

class 测试{};

,用sizeof(测试)计算类的大小,可以知道只有数据成员的大小,并没有方法的大小,

,因为其数据各自保存,而成员方法共用一份。

这指针

那么每个对象在调用方法是怎么会知道是自己的数据成员呢?

2,这指针使用时机

,这指针是由编译器所造,真实的隐藏在内部。

# include   using  namespace 性传播疾病;      测试{class    公众:   ,,,void  setData (int  x) {   ,,,,,,,data =, x;   ,,,}   ,,,int  getData () {   ,,,,,,,return 数据;   ,,,}   私人:   ,,,int 数据;   };   int 主要(void) {   ,,,Test  t1;   ,,,int 价值;   ,,,,   ,,,t1.setData (3);   ,,,value =, t1.getData ();   ,,,cout<& lt; value<& lt; endl;   ,,,,   ,,,return  0;   }

以上的这个程序,其实内部就隐藏了这指针,万一函数如下呢:

void  setData (int 数据){   ,,,data =,数据;   }

此时参数名字和数据类型名字一样,那么编译器只会认为是形参给形参赋值,会出错!

解决方案:

void  setData (int 数据){   ,,,这个→data =,数据;   }

此时这→数据指的就是当前对象的数据。


3,这指向当前对象的本质

,c++中编译器对类的编译顺序:(1),先识别类名;(2),在识别所有的数据成员(包括私有,公有,保护);(3),识别方法,并且重写方法。

void  setData (int 数据){   ,,,这个→data =,数据;   }   ...........      t1.setData (3);

上面的代码本质,有个隐藏的参数传递,其编译器改写的函数如下:

t1.setData(3)——祝辞,setData (3);

,,,,,空白setData(年代,int数据)<强>{}

相当于函数有一个隐式参数,但是程序不能那样写,必须写其对象调用的形式(知道本质,却不能写本质形式),否则会报错。

<强>

但问题远没有这么简单,再看下面的代码:

void  setData (int 数据){   却,能够才能=,空;   这才能→data =, x;   }

此时代码将出现问题,万一不小心给这=零;此时将会报错,编译根本无法通过,

但是,发明c++的人,不会让你给它赋值,这就的对这个本质在此剖析:

怎样才能不更改这个的值呢?改写函数:

t1.setData(3)——祝辞,setData (3);

,,,,,,,空白setDatais, int数据)<强>{}

这才是这的本质,其const修饰,为常量的,不可更改!



这指针