在C ++类中,使用“this”访问成员变量之间的区别是什么

时间:2011-11-03 21:51:39

标签: c++ class pointers

我做了一个简单的课来代表一扇门。要返回变量,我使用this指针访问它们。关于只是访问变量,使用this指针访问它们之间的区别是什么?

class Door
{
protected:
    bool shut; // true if shut, false if not shut
public:
    Door(); // Constructs a shut door.
    bool isOpen(); // Is the door open?
    void Open(); // Opens the door, if possible. By default it
    // is always possible to open a generic door.
    void Close(); // Shuts the door.
};
Door::Door()
{}
bool Door::isOpen()
{
    return this->shut;
}
void Door::Open()
{
    this->shut = false;
}
void Door::Close()
{
    if(this->isOpen()) this->shut = true;
}

这里可能有或没有区别,但对于更复杂的课程呢?

5 个答案:

答案 0 :(得分:10)

无。如果排除它,会自动添加this指针。

如果您正在执行以下操作,则只需使用它:

void Door::foo(bool shut)
{
    this->shut = shut; // this is used to avoid ambiguity
}

More usages


简要概述:

将方法视为将指针作为第一个参数传递的函数。

void Door::foo(int x) { this->y = x; } // this keyword not needed

大致等同于

void foo(Door* this_ptr, int x) { this_ptr->y = x; }

方法只是自动化。

答案 1 :(得分:3)

没有区别。

当你写出理智的C ++时,你不应该说this,除非在非常具体的情况下。 (我能想到的唯一一个是绑定指向成员函数的指针,将实例指针传递给其他对象,以及some situations涉及模板和继承(感谢最后一个示例的Mooing Duck)。)< / p>

只需给出函数参数和局部变量以及成员变量合理的名称,这样就不会产生任何歧义。

有一些最近的面向对象的准语言使得“this”和“new”这几个词与“我正在使用对象”同义,但对于年轻一代来说,这不是C ++习语。

答案 2 :(得分:1)

在你的情况下,没有区别。 只有更多的打字工作。

答案 3 :(得分:1)

这整件事似乎是多余打字的练习。据我所知,Close可以简化为:

void Door::Close() {
    shut = true; 
}

即使在不需要的情况下进行分配比仅在目前为假的情况下进行测试和设置要简单得多。

此评论也值得一提(IMO):

Door(); // Constructs a shut door.

似乎不适合实施:

Door::Door()
{}

如果您希望默认ctor将shut初始化为true,则需要/想要添加一些代码来执行此操作。

更糟糕的是,你的IsOpen似乎让事情完全落后:

bool Door::isOpen()
{
    return this->shut;
}

如果它关闭,则打开,反之亦然。

答案 4 :(得分:0)

除了this->引入的更多类型和噪音外,没有区别。

void Door::Close()
{
    if(isOpen()) shut = true;
}

更具可读性:

void Door::Close()
{
    if(this->isOpen()) this->shut = true;
}

但这只是个人偏好,也是一种风格问题。