从C+中的派生类访问成员变量+; 我目前正在学习C++中的OOP。 class Base { public: Base() {} protected: SomeClass variable; }; class Child : public Base { public: Child() {} void method() { // Access variable } };
从派生类访问基类中的成员变量时,这两种符号之间有什么区别?从C+中的派生类访问成员变量+; 我目前正在学习C++中的OOP。 class Base { public: Base() {} protected: SomeClass variable; }; class Child : public Base { public: Child() {} void method() { // Access variable } };,c++,oop,C++,Oop,从派生类访问基类中的成员变量时,这两种符号之间有什么区别? 此->变量 Base::variable 当缺少第三个选项时,首选什么?只有变量 什么时候是首选 最符合你审美观的 有些情况下,某些选项不起作用。在这种情况下,最好使用那些起作用的。例如:如果普通变量名已被另一个变量隐藏,则不能使用普通变量名。在某些情况下,如果基依赖于模板变量,则不能使用限定名。命名该变量的“完整”表达式为: this->Base::variable 它说: 名称为变量 它位于类型Base 拥有此实例的对象
此->变量
Base::variable
当缺少第三个选项时,首选什么?只有
变量
什么时候是首选
最符合你审美观的
有些情况下,某些选项不起作用。在这种情况下,最好使用那些起作用的。例如:如果普通变量名已被另一个变量隐藏,则不能使用普通变量名。在某些情况下,如果基依赖于模板变量,则不能使用限定名。命名该变量的“完整”表达式为:
this->Base::variable
它说:
名称为变量
它位于类型Base
拥有此实例的对象是this
由于您在一个可以自动找到基本成员的范围内,因此不需要base::
而且,由于您在一个成员函数中,所有成员都将自动找到,因此不需要this->
您可能需要Base::
来消除范围中其他变量的歧义,但是这个->
部分可能已经为您解决了这个问题
因此,通常,您只需要以下任何一项:
变量
(正常)
this->variable
(如果来自另一个作用域的内容正在隐藏它)
Base::variable
(如果当前类型中的某些内容正在隐藏它)
至于什么是“首选”…只要你满足了你的需求,你可以做任何你喜欢的事。但是simpler通常被认为是“更好的”,并且会从阅读您的代码的其他人那里收到更少的问题。另外,variable
是一个选项1。没有区别,什么都没有,还有2。问十个C++开发者什么是做某事的首选方式会导致十五个不同的答案,甚至当代码< SomeClass < /COD>继承到<代码> ChildSomeClass < /代码>中的差异时,它也被用在<子代码>子< /代码>的子类中。静态变量(除非由于无法访问而需要),因此读者可以快速识别出这是一个静态变量。@AlexGeorg当您需要基::
但它不是静态成员时会发生什么?