如何在成员函数中使用“this”?

时间:2010-05-03 23:39:24

标签: c++

我编写了Node类的成员函数,以后缀顺序读取节点树。

它将由Node实例调用,该实例是树的根节点。

所以:N.postfix();

这些似乎是非法的:

*this->left.postfix();
*this->right.postfix();

这样做的正确方法是什么?

class Node
{
public:
    const char *cargo; 
    int depth; 
    Node *left; 
    Node *right

void Node::postfix()
{
    if (this==__nullptr)
    {
        return;
    }
    else
    {
        *this->left.postfix();
        *this->right.postfix();
        out<<*this->cargo<<"\n";
        return;
    }
};

3 个答案:

答案 0 :(得分:10)

在成员函数中,通常不需要使用this来访问类成员;你可以简单地使用:

left->postfix();

如果您有函数参数或与类成员变量同名的其他局部变量,您可以使用this来引用成员变量,例如,

this->left->postfix();

您的代码非法的原因是它没有正确地将left视为指针。您需要使用left取消引用->才能访问其成员,如此处的正确代码所示。 (你也可以使用等效的(*left).postfix(),但这只会让你使用更多的括号而没有真正的好处。)

在表达式的开头使用间接运算符*也是不正确的,因为它应用于postfix()的结果(即,它取消引用{{1}返回的任何内容})。 postfix()没有返回任何内容,所以这是一个错误。请务必记住,postfix().运算符的优先级均高于->

答案 1 :(得分:6)

->运算符取消引用指针,因此额外的*会导致问题。你可以这样做:

this->left->postfix();

或者这个:

(*this).left->postfix();

答案 2 :(得分:1)


*this->left.postfix();

“取消引用在此”左“成员变量上调用postfix()的返回值。”


this->left->postfix();
//or
(*this->left).postfix();

“在解除引用的'左'成员变量上调用postfix()。”