2016-05-23 59 views
1

這是關於C++(而不是Java)繼承和變量名稱中的歧義。C++私有變量名稱和繼承歧義

假設我在這樣的情況:

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::xB::x? 我希望它在A::x上採取行動。我不知道在類A中聲明x是否是私有的足以使其在定義派生類時可能出現的不想要的含糊不清之處。

據我所知,只爲B::x使用不同的名稱是最好的辦法......但假設一個人「分心」,並忘記私人A::x存在,後果會有多糟?

謝謝!

回答

1

致電fct將採取行動A::x。派生類具有相同名稱的成員變量的事實是不相關的,因爲該成員是私有的並且對它們是隱藏的。

如果它能夠看到B::x那麼這將有點像虛擬數據!

3

由於fct是非虛擬的,它將始終作爲它自己的類的成員處理x。在任何其他分類中,它不會知道任何其他x

但是,如果fct是已申報的virtual和子類中重寫,重寫孩子將它改爲調用 - 這一個可以被編程,以便它使用其他x