从 C++ 派生类访问成员变量

lan*_*gio 0 c++ oop

我目前正在学习 C++ 中的 OOP。

class Base {
public:
    Base() {}

protected:
    SomeClass variable;
};


class Child : public Base {
public:
    Child() {}

    void method() {
        // Access variable
    }
};
Run Code Online (Sandbox Code Playgroud)

从派生类访问基类中的成员变量时,这两种表示法有什么区别?

  • this->variable
  • Base::variable

什么时候是首选?

Ast*_*ngs 6

命名该变量的“完整”表达式是:

this->Base::variable
Run Code Online (Sandbox Code Playgroud)

它说:

  1. 名字是 variable
  2. 它住在类型 Base
  3. 拥有这个实例的对象是 this

由于您处于将自动找到基本成员的范围内,因此您不需要Base::.

而且,由于您在一个成员函数中,所有成员都会自动找到,因此您不需要this->.

您可能需要Base::variable范围内的其他一些地方消除歧义,但该this->部分可能已经为您处理好了。

因此,通常,您只需要以下任何一项:

  1. variable (一般)
  2. this->variable (如果来自另一个范围的东西隐藏了它)
  3. Base::variable (如果当前类型中的某些内容隐藏了它)

至于什么是“首选”……只要满足了自己的需求,就可以为所欲为。但更简单通常被认为“更好”,并且会减少其他阅读您代码的人提出的问题。