为什么我们可以分配给*这个?

时间:2014-09-17 14:47:25

标签: c++ c++11

在C ++中,每当我们通过一个对象调用成员函数时,它会隐式地将一个参数传递给成员函数说 classname * const this 例如:

void SetID(int nID) { m_nID = nID; }

成为:

void SetID(Simple* const this, int nID) { this->m_nID = nID; }

现在在下面的例子中

#include <iostream>
using namespace std;

class Test {
private:
    int x;

public:
    Test(int x = 0) { this->x = x; }

    void change(Test* t) { *this = *t; }
    void print() { cout << "x = " << x << endl; }
};

int main() {
    Test ctest1(10);
    Test* ptest = new Test(20);
    ctest1.change(ptest);
    ctest1.display();
    return 0;
}

因此我们知道内部ctest1.change将传递此指针,即const (Test * const ptr)。那么我怎么可能将“this”改为指向其他一些对象。在abv示例中,这现在指向ptest

还想知道这和*这个

有什么区别

3 个答案:

答案 0 :(得分:1)

  

那么我怎样才能将“this”更改为指向其他对象

你不能;它始终指向调用成员函数的对象,并且无法更改。正如你所说,它表现得(或多或少)像Test * const类型的额外参数 - const意味着你无法将指针改为指向其他任何东西。

  

在abv示例中,现在指向ptest

不,不。 *this = *t修改this指向的对象的值,并将其重新分配给t个点。之后它仍指向同一个对象(带有新值)。

  

还想知道this*this

之间的区别

this是指向对象的指针; *this取消引用访问对象本身的指针。

答案 1 :(得分:0)

它调用赋值运算符。您没有将this更改为指向其他对象,而是更改this指向的内存。

答案 2 :(得分:0)

如何更改此指向其他内容?

用简单的英语::你不能这样做,你不应该这样做。

原因是&#34;这个&#34;对于X类是&#34; X * const this&#34;。