【发布时间】:2011-10-07 04:03:09
【问题描述】:
有人可以向我解释(*this) 指针并演示如何将它用作调用同一类的另一个对象的对象。我不明白的是,您将如何在具有相同变量名的不同 2 个不同对象的成员函数中引用两个数字。例如,将两个数字相乘。
a.Multiply(b);
//....
Numbers::Numbers Multiply(Numbers auggend)
{
}
【问题讨论】:
有人可以向我解释(*this) 指针并演示如何将它用作调用同一类的另一个对象的对象。我不明白的是,您将如何在具有相同变量名的不同 2 个不同对象的成员函数中引用两个数字。例如,将两个数字相乘。
a.Multiply(b);
//....
Numbers::Numbers Multiply(Numbers auggend)
{
}
【问题讨论】:
this pointer:
每个对象的成员函数都可以访问一个名为this的指针,该指针指向对象本身。当我们调用一个成员函数时,它就以this的值设置为对象的地址而存在。调用它的对象。使用this 指针,任何成员函数都可以找到它所属的对象的地址。它还可以用于访问它所指向的对象中的数据。示例:
void setdata(int ii)
{
i=ii; // one way to set data
this->i=ii; // another way to set data
}
【讨论】:
this pointer存放类实例的地址,可用于初始化值
【讨论】:
(*this) 是指向您的类实例化的指针。在您的示例中,如果 Numbers 类具有数据值“值”:
a.Multiply(b);
....
Numbers::Numbers Multiply(Numbers auggend)
{
return (this->value) * (auggend.value);
}
【讨论】:
首先,您的示例看起来不太正确。我认为应该是:
Numbers Numbers::Multiply(Numbers auggend)
{
}
无论如何,话虽如此,this 只是一个指向您的成员变量的Numbers * const 类型的变量。所以从你的例子a.Multiply(b),this 将持有&a 的值。
假设你有一些其他函数需要Numbers *:
void DoSomething(Numbers *num);
然后您可以使用this 调用该函数:
Numbers Numbers::Multiple(Numbers auggend)
{
DoSomething(this);
DoSomething(&auggend);
}
【讨论】:
class A{
int num;
void foo(int num)
{
num = 10; //local variable num is set to 10
this->num = 10 ; //class member num is set to 10
}
};
【讨论】: