class A
{
protected:
string word;
};
class B
{
protected:
string word;
};
class Derived: public A, public B
{
};
如何將變量的無障礙word
在Derived
受到影響?我將如何解決它?多重繼承:相同的變量名
class A
{
protected:
string word;
};
class B
{
protected:
string word;
};
class Derived: public A, public B
{
};
如何將變量的無障礙word
在Derived
受到影響?我將如何解決它?多重繼承:相同的變量名
這將是明確的,並且你會得到一個編譯錯誤說。
你需要使用正確的範圍內使用它:
class Derived: public A, public B
{
Derived()
{
A::word = "A!";
B::word = "B!!";
}
};
當全班同學的Derived
訪問word
,你不得不宣佈
class Derived: public A, public B
{
Derived()
{
A::word = X;
//or
B::word = x;
}
};
你的類Derived
將有兩個變量,B::word
和A::word
外Derived
你可以這樣訪問它們(如果你改變自己的訪問市民):
Derived c;
c.A::word = "hi";
c.B::word = "happy";
試圖訪問c.word
將導致錯誤,因爲沒有現場機智h名稱word
,但只有A :: word和B :: word。
裏面Derived
他們的行爲像常規字段,同樣在名稱A::var
和B::var
也在其他答案中提到。
可以使用using
關鍵字告訴編譯器所使用的版本:
class Derived : public A, public B
{
protected:
using A::word;
};
這告訴Derived
類有一個保護成員word
,這將是一個別名A::word
編譯器。然後,無論何時使用Derived
類中的非限定標識word
,這將意味着A::word
。如果你想使用B::word
,你必須完全限定範圍。
請注意,除了下面的良好答案之外,儘可能避免此類名稱衝突總是一個好策略。 –