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

Pet*_*art 1 c++

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

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

所以:N.postfix();

这些似乎是非法的:

*this->left.postfix();
*this->right.postfix();
Run Code Online (Sandbox Code Playgroud)

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

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;
    }
};
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 10

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

left->postfix();
Run Code Online (Sandbox Code Playgroud)

等等

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

this->left->postfix();
Run Code Online (Sandbox Code Playgroud)

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

*在表达式的开头使用间接运算符也是不正确的,因为它应用于结果postfix()(即,它取消引用返回的任何内容postfix()). postfix()没有返回任何东西,所以这是一个错误.重要的是要记住,.->运算符都具有更高的优先级*.


And*_*ite 6

->运营商取消引用指针,所以额外的*会引起问题.你可以这样做:

this->left->postfix();
Run Code Online (Sandbox Code Playgroud)

或这个:

(*this).left->postfix();
Run Code Online (Sandbox Code Playgroud)