2014-03-02 49 views
0

我想知道在這個特殊的情況下,''這個'在'這個'前放了一個星號,''=''重載。在這種情況下做什麼在星號前放置一個星號?

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'?

+0

'this'是一個指針,'* this'是對象本身的引用 – Brian

+0

所以如果你只是使用'這'你會指的是指針的地址嗎? – anacy

+1

'this'是一個指向對象的指針,所以它保存着對象的地址。 – Brian

回答

1

*this給出當前對象。在你的情況下,!(*this == rhs); inturn調用你在String類中定義的bool operator==(const String &rhs)

如果是通過指針(this),您將不得不手動調用operator==this->operator==(rhs)。通過在你的例子中輸入*this,你可以幫助編譯器知道它實際上需要調用operator==

3

使用*this通過所謂的取消引用返回對象的實際引用。在解引用之前,this指針。使用*this給你的「的內容」這一當前對象

Pointers/Dereference Link

FYI:只是一些清晰度添加到*&運營商以備將來參考其他問題

* var ...意思是「內容」var

INT * ...含義INT指針

& INT ...含義的INT

INT &地址...含義INT地址

0

您正在訪問當前目的。 this是指向當前對象的指針。 *this將成爲當前對象。

1

this是一個指向對象的指針。使用*推斷指針,導致實際的對象而不是內存地址。

+0

與參考文獻是否一樣?如果我使用'&var',則獲取對象的內容,如果我只是使用'var',我會得到地址? – anacy