我想知道在这种特殊情况下使用重载'!='运算符在'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'?
答案 0 :(得分:3)
使用*this
通过所谓的解除引用返回对象的实际引用。在取消引用之前,this
是指针。使用*this
为您提供“内容”此当前对象
仅供参考:只是为*
和&
运营商添加一些清晰度,以便将来参考其他问题
* 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
将成为当前对象。