Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;私有变量名和继承歧义 这是关于C++(非java)继承和变量名中的歧义。< /P>_C++_Variables_Inheritance_Private - Fatal编程技术网

C++;私有变量名和继承歧义 这是关于C++(非java)继承和变量名中的歧义。< /P>

C++;私有变量名和继承歧义 这是关于C++(非java)继承和变量名中的歧义。< /P>,c++,variables,inheritance,private,C++,Variables,Inheritance,Private,假设我处于这种情况: class A{ public: void fct(){do something with x;} private: int x; }; class B: public A{ private: int x; }; 如果我定义派生类的某个实例 B foo; 然后打电话 foo.fct(); fct()会作用于A::x还是B::x? 我希望它在A::x上运行。我想知道在类A中将x声明为private是否足以防止定义派生类时可能出现的不需要的歧义 我知道对B::x使用不

假设我处于这种情况:

class A{
public:
void fct(){do something with x;}

private:
int x;
};

class B: public A{
private:
int x;
};
如果我定义派生类的某个实例

B foo;
然后打电话

foo.fct();
fct()
会作用于
A::x
还是
B::x
? 我希望它在
A::x
上运行。我想知道在类A中将x声明为private是否足以防止定义派生类时可能出现的不需要的歧义

我知道对
B::x使用不同的名称是最好的。。。但是假设一个人“心烦意乱”,忘记了私有
A::x的存在,那么后果会有多严重


谢谢大家!

调用
fct
将作用于
A::x
。派生类具有同名的成员变量这一事实与此无关,因为该成员是私有的,并且对它们是隐藏的


如果它能够看到
B::x
,那就有点像拥有虚拟数据

调用
fct
将作用于
A::x
。派生类具有同名的成员变量这一事实与此无关,因为该成员是私有的,并且对它们是隐藏的


如果它能够看到
B::x
,那就有点像拥有虚拟数据

由于
fct
是非虚拟的,因此它将始终作为自己类的成员处理
x
。它不会知道任何其他类中的任何其他
x
s


但是,如果
fct
被声明为
virtual
并在子类中被重写,则将调用子类重写它-并且可以对该子类进行编程,以便使用其他
x
,因为
fct
是非虚拟的,所以它将始终作为自己类的成员处理
x
。它不会知道任何其他类中的任何其他
x
s

但是,如果
fct
被声明为
virtual
并在子类中被重写,则将调用子类重写它-并且可以对该子类进行编程,以便它使用其他
x