2016-05-23 12 views
1

これは、変数名のC++継承とあいまい性に関するものです。C++のプライベート変数名と継承のあいまいさ

私はこのような状況にいると仮定します。

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

private: 
int x; 
}; 

class B: public A{ 
private: 
int x; 
}; 

私は、派生クラス

B foo; 

のいくつかのインスタンスを定義し、

foo.fct(); 

A::xfct()行為は意志を呼び出す場合またはB::x? 私はそれがA::xに作用することを望みます。クラスAでプライベートとしてxを宣言することは、派生クラスを定義するときに発生する可能性のある欲求のない曖昧さに対して安全にするのに十分ですか?

私はB::xの別の名前を使用することが最もよいことを理解しています...しかし、1つが「散漫」であり、プライベートA::xが存在することを忘れた場合、結果はどれくらい悪くなるでしょうか?

ありがとうございました!

答えて

1

fctを呼び出すと、A::xになります。派生クラスが同じ名前のメンバ変数を持つという事実は、メンバがプライベートであり、それらから隠されているので無関係です。

もしそれがB::xを見ることができれば、それは仮想データを持つようなビットになります!

3

fctは仮想ではないため、それは常にそれ自身のクラスのメンバーとしてxを扱います。それは他のどんなクラスの他のxについても何も知らないでしょう。そして、それは他のxを使用するように、この1つはプログラムすることができる - fctvirtual宣言し、子クラスでオーバーライドした場合

しかし、子供はそれが代わりに呼び出されますオーバーライドします。

関連する問題