精华内容
下载资源
问答
  • C++this指针

    千次阅读 2019-07-20 23:05:56
    1) 以下说法不正确的是: (括号内为个人理解) A.this指针就是指向成员函数所作用的对象的指针 ... 静态成员函数中不能使用this指针 (因为static函数不属于某个对象) this指针是类的一个自动生成...

     

    1) 以下说法不正确的是:

    (括号内为个人理解)

    • A.this指针就是指向成员函数所作用的对象的指针   

    • B. 每个对象的空间中都存放着一个this指针

    • C.类的非静态成员函数,真实的参数比所写的参数多1 (多一个this指针)

    • D. 静态成员函数中不能使用this指针 (因为static函数不属于某个对象)

       

    this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象。全局仅有一个this指针,当一个对象被创建时,this指针就存放指向对象数据的首地址。

     

    所以该题选B

    展开全文
  • this指针常识性问题

    2018-07-08 00:20:35
    下面关于this指针的说法正确的是: A.调用类的成员函数时,对象的地址会隐式地作为第一个参数传递给this指针; B.通过取地址符&可以获得this指针的地址; C.对象进行sizeof运算时会加上this指针所占用的...

    下面关于this指针的说法正确的是:

    A.调用类的成员函数时,对象的地址会隐式地作为第一个参数传递给this指针;

    B.通过取地址符&可以获得this指针的地址;

    C.对象进行sizeof运算时会加上this指针所占用的空间;

    D.不能对this指针进行赋值操作。

    • 只有在访问类的非静态成员函数时编译器才会自动将对象的地址隐式地作为第一个参数传递给this指针,而在访问匪类跌静态成员函数时并不会如此,因此A是错误的。
    • 由于this指针是一种特殊的指针,无法直接获取this指针的地址,如果试图通过取地址符来获取this指针的地址,编译器会报错。因此B是错误的。
    • 由于this指针并不是类的成员,不属于类的一部分,其作用与仅局限于非静态成员函数内部,因此C是错误的。
    • 由于this指针只能指向试图访问非静态成员的对象本身,而不能指向其他的对象,因此this指针是一个常量,不能修改this指针的值。D正确。

     

    展开全文
  • this指针和 *this

    千次阅读 2014-12-21 19:01:09
    我们都知道,类的成员函数有一个附加的隐形形参,即指向该类对象的this指针,它与调用成员函数的对象绑定在一起。那么,这个this指针究竟是什么样的指针呢?其解引用*this返回的又是怎样的一个对象呢? 首先,我们以...

            我们都知道,类的成员函数有一个附加的隐形形参,即指向该类对象的this指针,它与调用成员函数的对象绑定在一起。那么,这个this指针究竟是什么样的指针呢?其解引用*this返回的又是怎样的一个对象呢?

    首先,我们以《C++ Primer》书中的Screen类为例说明,这个类只是简单声明,有些成员函数的具体实现没有定义。不必关注成员函数的实现,只需要看它的形式即可。



    //定义一个名为Screen的类型来表示计算机上的窗口
    #include <iostream>
    #include <string>
    using namespace std;
    class Screen
    {
    public:
    	//使用类型别名来简化类
    	typedef string::size_type index;
    	//构造函数
    	Screen(index hght,index wdth,const string &cntnts=""):
    	height(hght),width(wdth),cursor(0),contents(cntnts){}
    	//返回光标的位置
    	index get_cursor() const{return cursor;};
    	//增加三个成员函数,返回*this
    	Screen& move(index r,index c);//给定两个index值,将光标移至新位置
    	Screen& set(char);//将特定字符设置为特定值
    	const Screen& display(ostream &os) const;//输出内容
    private:
    	std::string contents;//窗口内容
    	index cursor;//光标当前停留的位置
    	index height,width;//窗口的高度和宽度
    };
    //给定两个index值,将光标移至新位置
    Screen& Screen::move(index r,index c)
    {
    	index row=r*width;
    	cursor=row+c;
    	return *this;
    }
    //将特定字符或光标指向的字符设置为特定值
    Screen& Screen::set(char c)
    {
    	contents[cursor]=c;
    	return *this;
    }
    //输出内容
    const Screen& Screen::display(ostream &os) const
    {
    	os<<contents;
    	return *this;
    }
    int main()
    {
    	//根据屏幕的高度、宽度和内容的值来创建Screen
    	Screen myscreen(5,6,"abcde\nfghij\nklmno\pqrst\nuvwxy");
    	myscreen.move(4,0).set('#').display(cout);
    	cout<<endl;
    	return 0;
    }
    

    基本概念

    1. const指针——指针本身的值不可修改,只能指向指定位置的对象
      其定义如下:
      int errNumb = 0;
      int *const curErr=&errNumb;//curErr是一个指向int型对象的const指针
      可以改变const指针所指向的值,但不能改变const指针所保存的地址,如下:
      *curErr=1;//curErr所指向的值变为1,即errNumb=1
      ++curErr;//错误,curErr是一个常量,不能改变
      const指针在定义时必须初始化,一经初始化,则指针本身不可再修改,只能指向初始化时的对象。
    2. 指向const对象的指针——只能读取对象,不能利用指针修改对象
      其定义如下:
      const double pi = 3.14;
      const double *cptr = &pi;//cptr是一个指向const对象pi的指针
      *cptr=3.15; //错误,不能通过指向常对象的指针修改对象
      ++cptr;//正确,指向常对象的指针可以指向别处
    3. 常(const)成员函数
      在形参表后用const修饰的成员函数,表示只能读取类的数据成员,不能修改。如上例中的index get_cursor()const{return cursor;};
    4. 常(const)对象
      在定义类对象时用const修饰的对象,常对象只能调用类中的常成员函数,而普通的对象则没有此限制。如下例:
      const Screen herscreen();//herscreen就是一个Screen类型的常对象

    this指针

    1. this指针是指向类类型的const指针
      调用成员函数时,隐藏的this指针被初始化为调用成员函数的对象的地址,可以改变this所指向的值,但不能改变this所保存的地址,即this指针只能指向该对象,不能指向别的对象。所以,无论在非const成员函数还是const成员函数中,this首先是一个指向类类型的const指针。在上例中,非const函数Screen& move(index r,index c)的this类型如下:
      Screen *const this
    2. const成员函数中的this指针——指向常(const)对象的const指针
      在普通的非const成员函数中,this的类型就是一个指向类类型的const指针。
      而在const成员函数中,因为不能通过this指针修改类的数据成员,只能读数据成员,故this的类型是一个指向常(const)类对象的const指针。既不能改变this所指向的对象,也不能改变this所保存的地址。在上例中,const成员函数 get_cursor() const的this的类型如下:
      const Screen *const this

    返回*this——返回的是一个对象的引用

    1. 何时返回*this
      当我们需要将一个对象作为整体引用而不是引用对象的一个成员是。最常见的情况就是在这样的函数中返回*this:
      该函数返回对调用该函数的对象的引用。
      如上例中的
      myscreen.move(4,0).set('#');
      等价于
      myscreen.move(4,0);
      myscreen.set('#');
    2. 返回的对象引用是什么类型:常对象引用 or not?
      在普通的非const成员函数中,*this返回的普通的对象引用。在上例中,非const成员函数move( )返回的就是一个普通的对象引用:
      //给定两个index值,将光标移至新位置
      Screen& Screen::move(index r,index c)
      {
      	index row=r*width;
      	cursor=row+c;
      	return *this;
      }

      而在const成员函数中,*this返回的是常(const)对象引用。在上例中,const成员函数display() const返回的就是一个常(const)对象的引用:
      //输出内容
      const Screen& Screen::display(ostream &os) const
      {
      	os<<contents;
      	return *this;
      }
      注意:
      不能从const成员函数返回指向类对象的普通引用,而应该是const引用。const成员函数只能返回*this作为一个const引用。

      Screen&
       display(ostream &os) const; //错误,const成员函数返回的应该是一个const对象引用
      const Screen& display(ostream &os) const; //正确
      那么返回类型之间的区别又会导致什么结果呢?
      我们知道,常(const)对象只能调用const成员函数,而普通对象既能调用const成员函数,又能调用非const成员函数。所以,我们可以判断以下调用是否正确?
      mysceen.move(4,0).set('#'); //正确,因为非const成员函数move()返回的是普通引用,可以调用一切成员函数
      myscreen.move(4,0).display(cout);//正确
      myscreen.display(cout).set('#'); //错误,因为const成员函数display()返回的常对象引用,只能调用const成员函数,而set.()是非const成员函数

      因此,我们可以确定,返回类型的不同对调用成员函数有了限制。
    现在,我们可以做出结论了:
    1. 非const成员函数的this是一个指向类类型的const指针,可以改变this所指向的值,但不能改变this所保存的地址,即不能再指向别的对象。
      const成员函数的this是一个指向常(const)类对象的const指针,既不能改变this所指向的对象的值,也不能改变this所保存的地址。

    2. 非const成员函数的*this返回的是普通引用,可以调用一切成员函数。
      const成员函数的*this返回的是常(const)对象引用,只能调用const成员函数。
    上面只是我学习过程中的一些浅显理解,拿出来与大家共享,也希望得到大家的指点。

    展开全文
  • 一直没理解this应该什么时候用,今天自己添加一个Edit 的派生类,在里里面用到了this; 在这里用:GetDlgItem(IDC_EDIT1)-> GetWindowText(str); 一直有错误; 改成:this->GetWindowText(str); 则运行正确; ...

    一直没理解this应该什么时候用,今天自己添加一个Edit 的派生类,在里里面用到了this;

    在这里用:GetDlgItem(IDC_EDIT1)-> GetWindowText(str);  一直有错误;

    改成:this->GetWindowText(str);  则运行正确;

     

    CMyEtid 类的生成过程如:http://blog.csdn.net/xlm289348/article/details/8126759  所示;

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • C++this指针详解

    千次阅读 多人点赞 2017-04-06 01:36:06
    我们知道在如下例子中。 ...Fun(int a)是Test的非静态成员函数,所以编译器在编译期间改写该函数时,会自动将一个名为this指针当作为第一个参数传入。 类似于:Fun(Test* const this,int a);
  • c++ this指针与const对象

    千次阅读 2017-11-16 18:38:38
    在 c++的const对象一文中已经介绍了const对象的属性,本文尝试从this指针的角度,再来分析const对象。 1. 问题引入   同样的示例,定义一个类,并将其实例化为const对象: //1_const_obj.cpp class Obj { ...
  • 不要再构造函数中使用this指针

    千次阅读 2019-02-12 22:13:25
    只有当构造函数完成后,这个对象才是真正有效的,即this才是正确的。而再构造中使用this时,这个对象并没有完全的初始化好,所以存在问题。 https://blog.csdn.net/zenghui08/article/details/11853685 ...
  • this指针的介绍和用法

    千次阅读 多人点赞 2017-01-20 13:45:55
    this指针是面向对象程序设计的一项概念,在C++中,它表示当前运行的对象。在实现对象的方法时,this指针来获得该对象自身的引用。 正如class Family类,创建了Family类的两个对象,即Chen1和Chen2。 (1)假如...
  • C++ this指针与const成员函数

    千次阅读 2017-10-29 15:09:54
    C++ this指针与const成员函数this指针 ...this指针只能在成员函数中使用,全局函数、静态函数都不能使用this指针 **在普通成员函数中,this是一个指向非const对象的const指针(如类类型为Student,那么thi
  • c++中this指针的用法详解

    万次阅读 多人点赞 2016-05-31 11:15:13
    为什么引入this指针?  最简单的应用场景就是:当我们在类中定义了一个变量,同时在类成员函数中定义了同一变量时,也就是说变量名重复时,但是我们想使用类中定义的变量,这个时候我们该怎么办呢?这个时候就是...
  • C++ this指针解析

    千次阅读 2011-08-24 20:54:11
    this指针我并不陌生,学过java的都知道,this在java中也经常出现。今天我专门研究了一下C++中的this指针。 http://www.cnblogs.com/hnrainll/archive/2011/05/20/2051939.html this指针指向的就
  • C++关于类成员函数指针正确写法

    千次阅读 2015-05-26 16:02:52
    关于类成员函数指针正确写法 10-09 Web开发 Dante 10,735 一般来说,函数指针的用法是比较简单的。 比如对于函数: int innerFunc(int num); 1 int innerFunc(int num);...
  • this指针的那些事儿

    千次阅读 2016-10-08 22:11:51
    this指针也叫自引用指针,专门用来存放当前正在被调用对象的地址。
  • QT之this指针详解

    千次阅读 2017-02-20 11:38:10
    this指针只能在一个类的成员函数中调用,它表示当前对象的地址。下面是一个例子: void Date::setMonth( intmn ) { month = mn; // 这三句是等价的 this->month = mn; (*this).month = mn; } 1. this只能...
  • 深入探讨this指针:从汇编的角度考虑 总结:至此我们对this指针和成员函数调用有了更进一步的认识, (1) this 指针只存在于成员函数内部, (2) 成员函数的调用时,this指针并没有那么神秘,那完全可以认为对象在调用...
  • 【C++】隐含的this指针

    千次阅读 2017-03-12 11:13:28
    当我们在进入一个房子之后,你可以看见房子里面的桌子、椅子、地板... 在类的成员函数内部,暗含着一个名字是this指针,这个指针指向了调用该函数的类对象。 下面我们来看一个简单的例子:class Employee { pubilc:
  • 深入探讨this指针

    千次阅读 2007-08-01 10:03:00
    深入探讨this指针 为了写这篇文章,准备了好长时间,翻遍了箱底的书籍。但是现在还是不敢放开手来写,战战兢兢。不是担心自己写错,而是唯恐自己错误误导别人。...关于this指针的描述我们一般从语言层次上讲;thi
  • this指针到底存放到哪里

    千次阅读 2018-06-13 15:09:55
    当一个对象调用某成员函数时会隐式传入一个参数, 这个参数就是this指针this指针中存放的就是这个对象的首地址。 这和C中通过向函数传递结构体变量的地址是不是很像?只是传参形式不一样罢了! 在C中我们是手工把...
  • Javascript this指针详解

    千次阅读 2012-06-05 18:02:42
    Javascript 可以通过一定的设计模式来实现面向对象的编程,其中this指针”就是实现面向对象的一个很重要的特性。但是this也是Javascript中一个非常容易理解错,进而用错的特性。特别是对于接触静态语言比较 久了...
  • this指针 operator* 解析

    千次阅读 2014-11-19 11:32:21
    当我在侯捷先生的《STL源码剖析》中看到类似的代码时,我内心产生个疑惑:迭代器的->操作 会不会重复调用了解引用操作即operator*。...return *this; }   testFunc* operator->() { return &
  • this指针的总结

    千次阅读 2009-12-04 09:23:00
    (搜罗了网上关于this指针理解的精华)参考(http://hi.baidu.com/271032830/blog/item/a7d065335a821047ad4b5ff0.html) (http://blog.csdn.net/starlee/archive/2008/01/24/2062586.aspx)先要理解class的意思。...
  • void Date::setMonth( int mn ) {   month = mn; // 这三句是等价的   this->month = mn;... Please choose the right statement of "this" pointer:(下面关于this指针哪个描述是正确的) A.
  • 而对于成员函数Test4()要访问类的成员变量,因此要使用this指针,这个时候发现this指针的值为NULL,就会造成程序的崩溃。   其实,我们可以想象编译器把Test4()转换成如下的形式: void  CNullPointCall::...
  • 下面这个程序不见得在每种编译器上都能通过编译,既使通过了编译,也不见得可以成功运行并输出结果。...但它至少能引发你的思考,加深一点你对this指针的理解,如果你还不是十分理解的话。#include using namespace s
  • 浅谈C++的this指针

    千次阅读 2014-12-07 16:26:19
    一个关于C++很坑的问题,能够对this指针能够有更好的认识 代码 1234567891011121314151617181920 class A {public: A(int x=0): a(x) {} void print() { cout "print ok" } void print_int() {
  • JAVA中this指针

    千次阅读 2008-11-23 20:20:00
    自己编写了一个小程序来说明一下this的用法 不一定正确,请大家指教 public class Person{ private int age; private String name; public void setAge(int age) { this.age=age; } public int getAge()
  • this只能在成员函数中使用 由此可见this在成员函数的开始前构造的在成员的结束后清除 1this指针是什么时候创建的 2this指针存放在何处 堆栈...5我们只有获得一个对象后才能通过对象使用this指针如果我们知道一个对象thi
  • 浅析C++中的this指针及汇编实现

    千次阅读 2016-11-09 17:14:30
    浅析C++中的this指针及汇编实现

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,138
精华内容 56,855
关键字:

关于this指针使用正确的是