提问者:小点点

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


我目前正在学习C++中的面向对象编程。

class Base {
public:
    Base() {}

protected:
    SomeClass variable;
};


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

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

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

  • 此->变量
  • base::variable

什么时候更好呢?


共2个答案

匿名用户

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

this->Base::variable

上面说:

  1. 名称为变量
  2. 它位于base
  3. 类型中
  4. 拥有此实例的对象是this

由于您位于将自动找到基成员的作用域内,因此不需要base::

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

您可能需要base::来消除作用域中其他一些变量的歧义,但this->部分可能已经为您解决了这一问题。

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

  1. 变量(通常情况下)
  2. 此->变量(如果来自另一个作用域的东西隐藏了它)
  3. base::variable(如果当前类型中的某个内容隐藏了它)

至于什么是“首选”……只要满足了你的需求,你可以做任何你喜欢的事情。 但是更简单通常被认为是“更好的”,并且会使阅读您代码的其他人产生更少的问题。

匿名用户

缺少第三个选项:仅variable

什么时候更好呢?

最符合你审美的那个。

在某些情况下,某些选项是行不通的。 在这种情况下,最好使用那些确实有效的。 例如:如果已被另一个变量遮蔽,则不能使用纯变量名。 在基依赖于模板变量的某些情况下,不能使用限定名。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|访问|派生类|中|成员|变量)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?