this指针

来源:互联网 发布:hat linux重置root密码 编辑:程序博客网 时间:2024/06/05 20:44

说到C++中的类,其中一个非常方便的地方就是,当我们将某一类具有相同属性和行为的封装成一个类后, 我们只需要用该类型创建不同的对象,那么就可以生成很多对象实例,

类是对对象的抽象,它是一种抽象的数据类型,是一个抽象的概念,对象是对客观事物的抽象。

对象是类的实例,类是对象的模板,万物皆为对象,对象属于某个类,

对象的唯一来源于世界中事物的唯一;

对象的唯一在程序中是地址内存的唯一;那么我们怎么用不同的对象或指针来找到其对应的内存地址呢???

这里就来到了文中的this指针,一个很重要的隐士,默默的在后面做着贡献和牺牲,类中的无名英雄!!

从来不让人知道!捧着一颗心来,不带半颗草去!!

this的作用:

一个对象的this指针并不是这个类的一部分,不影响sizeof(对象)的大小。this作用域是在类的内部,当在类的非静态成员函数中访问非静态成员的时候,编译器就会自动将对象本身的地址作为一个隐含的参数传递给函数!

this不是类的成员变量,我们可以通过sizeof(对象)来确定;

每一个类的成员函数都有一个隐含的参数,当前这个类的指针->this,地址和该类生成的对象的地址一样

this指向的是各个对象的地址;主要用来区分那个类的成员变量,那个对象调用就把那个对象的地址传给成员函数的this指针,然后去找对应对象的成员变量;

注意:一定是成员函数和成员变量,非成员函数,如静态成员函数的成员函数的区别就是静态成员函数没有this指针,所以它不能调用某个对象的成员变量,分不清是呢个对象的!

下面看一个代码示例:

#include <iostream>using namespace std;class people{public:int num; //全局的变量;int data;public:people(int num,int data){//num=123; //局部的变量;num=123;//局部的变量;data=234;people::num=888; //调用全局的变量;类名加作用域来区分变量的作用域;this->num=888; //全局的变量;this->data=999;}void show(){cout<<this<<endl; //当前对象的地址;}void show1(){cout<<this->num<<endl;}void show2(){cout<<"adfsf"<<endl;}};int main(){people pe(100,200);cout<<&pe<<endl;pe.show(); //this 指针的地址和类对象的地址是一样的;people peo(100,200);cout<<&peo<<endl;peo.show();//this 两个地址是一样的;people *pp=NULL;//pp指向NULL,可以调用函数,但是函数里不能有类的属性。里面没有任何变量;//pp.show1();//pp没有对象,所以不能调用类中的变量;pp->show2();//pp可以调用函数;函数的地址已经生成,找到地址就可以用,但是累的变量它找不到地址;cout<<pe.num<<endl;//888 num的值是;-858993460cout<<sizeof(people)<<endl;//8  成员变量的总的大小;system("pause");return 0;}


值得注意的是:

1.this指针就是当前对象的首地址;

2.空指针NULL可以调用不含有成员变量的函数,因为只要找到函数的入口地址就可以调用该函数;

3.静态函数没有this指针,不能访问成员变量;用类名就可以调用;








4 1
原创粉丝点击