在这种情况下,在这个“这个”前面放一个星号是什么?

时间:2014-03-02 05:26:07

标签: c++

我想知道在这种特殊情况下使用重载'!='运算符在'this'前面放一个星号是什么。

class String
{
private:
    int m_length;
    char *m_strPtr;

    //Utility function
    void set_string( const char *string );

public:
    String( const char *string ); // Default constructor
    String( const String &string ); // Copy constructor
    ~String();

    int get_length() const { return m_length; };

    // Overloaded operators
    bool operator!=( const String &rhs ) const { return !( *this == rhs ); };
    bool operator==( const String &rhs ) const { return ( strcmp( m_strPtr, rhs.m_strPtr ) == 0 ); };

};

为什么在这种情况下你会使用'* this'而不只是'this'?

4 个答案:

答案 0 :(得分:3)

使用*this通过所谓的解除引用返回对象的实际引用。在取消引用之前,this指针。使用*this为您提供“内容”此当前对象

Pointers/Dereference Link

仅供参考:只是为*&运营商添加一些清晰度,以便将来参考其他问题

  

* var ...表示“var

的内容”      

int * ...表示int指针

     

& int ...表示int的地址

     

int& ...表示int地址

答案 1 :(得分:1)

this是指向对象的指针。使用* deferences指针,导致实际对象而不是内存地址。

答案 2 :(得分:1)

*this给出当前对象。在您的情况下,!( *this == rhs );会调用您在bool operator==( const String &rhs )班级中定义的String

如果是通过指针(this),则必须手动调用operator== this->operator==(rhs)。通过在示例中添加*this,您可以帮助编译器知道它实际上需要调用operator==

答案 3 :(得分:0)

您正在访问当前对象。 this是指向当前对象的指针。 *this将成为当前对象。