1,this指针是不是const类型的是这样的,是本类型的const指针
2,C里的this指针this就是一个语法而已,表示对象的指针 。就比如某人叫做张三和李四都没啥区别吧,只有知道是某个人而已 。严格来说既不是类,也不是对象成员,也不属于成员函数 。this指针就是this指针 。只是写法和那些有点相似而已 。知道它哪些地方有哪些语法与作用就是了class A public:bool comp(A* p)return p == this;}};A a;a.comp(&a);//返回truethis就是C扩展成C++最关键的因素,也就是说C++可以先看成先翻译成C 。反过来C++功能其实等价于C 。调用成员函数其实都是调用的this->func(..);只是有时候可以省略而已但是C++翻译成C就是classA_func_(this, ...)这个没啥难理解的吧,这中间的任何操作都是C++编译的过程,如果真想追根究底,就可以自己学编译原理,自己写个简单的语法编译器以及虚拟机【this指针类型,this指针是不是const类型的】
3,this指针指的是什么this指针是一个隐含于每一个成员函数中的特殊指针 。它是一个指向正在被该成员函数操作的对象,也就是要操作该成员函数的对象 。当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含作用this指针 。而通常不去显式地使用this指针来引用数据成员 。同样也可以使用*this来标识调用该成员函数的对象 。下面举一例子说明this指针的应用 。#include<iostream.h>classApublic:A()A(inta,intb)voidcopy(A&aa);//对象引用作函数参数voidprint()private:inta,b;};voidA::copy(A&aa)if(this==&aa)return;//这个this是操作该成员函数的对象的地址,在这里是对象a1的地址*this=aa;//*this是操作该成员函数的对象,在这里是对象a1 。//此语句是对象aa赋给a1,也就是aa具有的数据成员的值赋给a1的数据成员}voidmain()Aa1,a2(3,4);a1.copy(a2);a1.print();}运行结果:3,4
4 , C THIS 指针第一个问题就相当于指向类对象的指针,在定义对象时,this默认指向该对象 。可以调用该对象的类的成员函数第二个问题 , 不是,如果你的子类对象中有和父类一样的函数,那么就是函数的重写即override,所以如果你是子类对象调用函数的话,就调用的是子类中定义的成员函数 。问题一 this指针指向调用该函数的对象,在函数体中直接用变量名就相当于前面加上this->;问题二 同名函数指的是返回类型,函数名相同,形参表(形参个数和类型)不同的函数;指向首个地址的那个说法,只有在数组里是如是说 。a[],a既可以代表数组 , 也可以代表a[0]的地址 。对于this指针,你可以如是理解:它也和数组一样,通过this->指向访问其元素 。类似数组通过a[x]访问元素 。有一点不同 , a[]的每一个元素的长度都是相等的 。但是this指针指向的那段地址,每个元素的长度都不相同,所以,就算this所指向的区域的第一个变量是第一个定义的变量 。但不能用this直接访问之 。关于继承的那个,我也不大清楚 , 不过都是被封装起来的,不能分割的 。一个对象里的元素必须同时消除或者生成 。一般情况下,顺序没有影响 。this指针指向一个内存空间,里面的东西必须通过调用才能访问 。同名函数 。一般是指多态 。表示函数名字相同,但是参数类型或者个数不同的函数 。在继承里,如果子类有父类的同名函数,并具有相同的参数,那么子类的函数会覆盖父类 。第一个问题 ,每个对象都有一个this指针 你说它指向对象第一个成员变量就是错误的 它指向的是对象本身 而没有权限去访问对象里的成员你在谈论到内存分配的顺序时 你的说法又是错的 这个得看你定义对象的顺序 后面你说的子类访问函数神马的感觉你思维混乱了第二个问题,你那句是陈述句 是想让我改错么?如果是我想说 同名函数在没有声明虚函数或者用作用域亦或者采用同名覆盖原则 的前提下 会产生二义性的错误 回答完毕第一个问题,THIS指针指向对象本身,首变量地址即对象指针第二个问题 , 每个子类对象都会有直接继承的父类的对象,至于对象的布局,一般的情况下是在对象的开始,这样从子类到父类的转化容易而且比较容易实现多态 。5,Cthis指针的详细解析在前面曾经提到过: 每个对象中的数据成员都分别占有存储空间,如果对同一个类定义了n个对象,则有n组同样大小的空间以存放n个对象中的数据成员 。但是,不同对象都调用同一个函数代码段 。那么,当不同对象的成员函数引用数据成员时,怎么能保证引用的是所指定的对象的数据成员呢?假如,对于例9.6程序中定义的Box类,定义了3个同类对象a,b,c 。如果有a.volume( ) ,应该是引用对象a中的height,width和length,计算出长方体a的体积 。如果有b.volume( ),应该是引用对象b中的height,width和length , 计算出长方体b的体积 。而现今都用同一个函数段,系统怎样使它分别引用a或b中的数据成员呢?在每一个成员函数中都包含一个特殊的指针 , 这个指针的名字是固定的,称为this指针 。它是指向本类对象的指针 , 它的值是当前被调用的成员函数所在的对象的起始地址 。例如,当调用成员函数a.volume时,编译系统就把对象a的起始地址赋给this指针,于是在成员函数引用数据成员时 , 就按照this的指向找到对象a的数据成员 。例如volume函数要计算height*width*length的值,实际上是执行:(this->height)*(this->width)*(this->length)由于当前this指向a,因此相当于执行:(a.height)*(a.width)*( a.length)这就计算出长方体a的体积 。同样如果有b.volume( ) , 编译系统就把对象b的起始地址赋给成员函数volume的this指针,显然计算出来的是长方体b的体积 。this指针是隐式使用的,它是作为参数被传递给成员函数的 。本来 , 成员函数volume的定义如下:int Box::volume( )return (height*width*length);}C++把它处理为int Box::volume(Box *this)return (this->height * this->width * this->length);}即在成员函数的形参表列中增加一个this指针 。在调用该成员函数时,实际上是用以下方式调用的:a.volume(&a);将对象a的地址传给形参this指针 。然后按this的指向去引用其他成员 。需要说明: 这些都是编译系统自动实现的,编程序者不必人为地在形参中增加this指针,也不必将对象a的地址传给this指针 。在需要时也可以显式地使用this指针 。例如在Box类的volume函数中,下面两种表示方法都是合法的、相互等价的 。return (height * width * length); //隐含使用this指针return (this->height * this->width * this->length); //显式使用this指针可以用*this表示被调用的成员函数所在的对象,*this就是this所指向的对象,即当前的对象 。例如在成员函数a.volume( )的函数体中,如果出现*this,它就是本对象a 。上面的return语句也可写成return((*this).height * (*this).width * (*this).length);注意*this两侧的括号不能省略,不能写成*this.height 。所谓“调用对象a的成员函数f”,实际上是在调用成员函数f时使this指针指向对象a,从而访问对象a的成员 。在使用“调用对象a的成员函数f”时,应当对它的含义有正确的理解 。
推荐阅读
- 生物数据统计分析软件,生物统计分析软件教程课后题答案
- Mysql字符串替换 mysql字符like
- 苹果智能汽车,苹果秘密开发自动驾驶电动汽车
- mysql线程数配置 mysql线程查询
- sas数据分析用书,SAS数据分析与CDISC标准
- apple教育优惠什么时候开始,苹果平板电脑 学生有优惠吗
- 猫爷介绍 mysql取md5函数
- weixing3,微星360m迫击炮主板
- mysql8.0登录命令 mysqlssh登录