我目前正在使用C ++学习OOP。
class Base {
public:
Base() {}
protected:
SomeClass variable;
};
class Child : public Base {
public:
Child() {}
void method() {
// Access variable
}
};
从派生类访问基类中的成员变量时,这两种表示法有什么区别?
this->variable
Base::variable
什么时候是首选?
答案 0 :(得分:6)
该变量的“完整”表达式为:
this->Base::variable
它说:
variable
Base
this
由于您位于可以自动找到基本成员的范围内,因此不需要Base::
。
而且,由于您位于将自动找到所有成员的成员函数中,因此不需要this->
。
您可能需要Base::
来消除其他variable
范围的歧义,但是this->
部分可能已经为您解决了这一问题。
因此,通常,您仅需要以下任何一项:
variable
(通常)this->variable
(如果来自另一个范围的某些内容将其隐藏)Base::variable
(如果当前类型的内容正在隐藏它)至于“首选” ...只要满足您的需求,您就可以做任何喜欢的事情。但是简单的方法通常被认为是“更好”的方法,并且会减少其他人阅读您的代码的问题。
答案 1 :(得分:0)
缺少第三个选项:仅variable
。
什么时候是首选?
最能满足您美学要求的人。
在某些情况下,某些选项不起作用。在这种情况下,最好使用有效的工具。示例如下:如果普通变量名已被另一个变量遮盖,则不能使用它。在某些情况下,如果名称取决于模板变量,则不能使用限定名称。