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

时间:2020-07-30 11:55:15

标签: c++ oop

我目前正在使用C ++学习OOP。

class Base {
public:
    Base() {}

protected:
    SomeClass variable;
};


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

    void method() {
        // Access variable
    }
};

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

  • this->variable
  • Base::variable

什么时候是首选?

2 个答案:

答案 0 :(得分:6)

该变量的“完整”表达式为:

this->Base::variable

它说:

  1. 名称是variable
  2. 它的类型为Base
  3. 拥有该实例的对象是this

由于您位于可以自动找到基本成员的范围内,因此不需要Base::

而且,由于您位于将自动找到所有成员的成员函数中,因此不需要this->

您可能需要Base::来消除其他variable范围的歧义,但是this->部分可能已经为您解决了这一问题。

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

  1. variable(通常)
  2. this->variable(如果来自另一个范围的某些内容将其隐藏)
  3. Base::variable(如果当前类型的内容正在隐藏它)

至于“首选” ...只要满足您的需求,您就可以做任何喜欢的事情。但是简单的方法通常被认为是“更好”的方法,并且会减少其他人阅读您的代码的问题。

答案 1 :(得分:0)

缺少第三个选项:仅variable

什么时候是首选?

最能满足您美学要求的人。

在某些情况下,某些选项不起作用。在这种情况下,最好使用有效的工具。示例如下:如果普通变量名已被另一个变量遮盖,则不能使用它。在某些情况下,如果名称取决于模板变量,则不能使用限定名称。