【问题标题】:Object calling an object对象调用对象
【发布时间】:2011-10-07 04:03:09
【问题描述】:

有人可以向我解释(*this) 指针并演示如何将它用作调用同一类的另一个对象的对象。我不明白的是,您将如何在具有相同变量名的不同 2 个不同对象的成员函数中引用两个数字。例如,将两个数字相乘。

a.Multiply(b);
//....
Numbers::Numbers Multiply(Numbers auggend)
{
}

【问题讨论】:

    标签: c++ class pointers


    【解决方案1】:
    this pointer:
    

    每个对象的成员函数都可以访问一个名为this的指针,该指针指向对象本身。当我们调用一个成员函数时,它就以this的值设置为对象的地址而存在。调用它的对象。使用this 指针,任何成员函数都可以找到它所属的对象的地址。它还可以用于访问它所指向的对象中的数据。示例:

    void setdata(int ii)
    {
       i=ii;         // one way to set data
       this->i=ii;   // another way to set data
    }
    

    【讨论】:

      【解决方案2】:

      this pointer存放类实例的地址,可用于初始化值

      【讨论】:

        【解决方案3】:

        (*this) 是指向您的类实例化的指针。在您的示例中,如果 Numbers 类具有数据值“值”:

        a.Multiply(b);
        ....
        Numbers::Numbers Multiply(Numbers auggend)
        {
          return (this->value) * (auggend.value);
        }
        

        【讨论】:

        • so (this->value),指向对象“a”和“(auggend.value);”中的“value”变量是指乘法参数中的“值”变量吗?
        • 确实如此。 (this*->*value) vs (auggend*.*value) 的原因留给读者练习;-)。
        【解决方案4】:

        首先,您的示例看起来不太正确。我认为应该是:

        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);
        }
        

        【讨论】:

          【解决方案5】:
          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
             }
          };
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-12-24
            • 1970-01-01
            • 2014-10-08
            • 2013-11-30
            • 1970-01-01
            • 2023-03-13
            • 2010-11-02
            相关资源
            最近更新 更多