10
A
回答
24
在這種情況下,您應該完全限定成員名稱。
class A
{
public:
int x;
};
class B : public A
{
public:
int x;
B()
{
x = 0;
A::x = 1;
}
};
2
以classname::
爲前綴。
7
如果指定名稱,將自動訪問繼承類中的名稱。如果你的意思是你如何訪問基類中的一個,請使用Base :: member
3
是的。
確認您的通話,f()
,類名爲:SpecificClass::f()
。
6
要訪問基類中隱藏的成員,必須在成員名稱前加上基類名稱。請看下圖:
class A
{
protected:
int i;
};
class B : public A
{
public:
void foo(void)
{
int a_i = A::i;
int b_i = i;
int b_i_as_well = B::i;
}
private:
int i;
};
+0
+2 [我希望]爲例。 – 2010-04-13 16:26:31
3
一種方法(在所有其他答案已經提到)是使用合格的成員名稱,如Base::member
。如果這是你的風格,可以通過this
指針直接訪問它,如果這是你的風格:this->Base::member
。
另一種方法是通過this
指針執行訪問,該指針明確轉換爲基類類型:((Base *) this)->member
。
當然,上述對this
指針的引用是在假設您試圖從類的某個非靜態成員函數內訪問成員的情況下作出的。要從「外部」訪問,可以將相同的技巧應用於任何其他指針(或參考):some_pointer->Base::member
或((Base *) some_pointer)->member
。
對於數據成員來說,這兩種方法是等價的。對於成員函數,它們可以通過虛函數導致不同的結果。出於這個原因,一般來說,第一種方法應該是優選的。
相關問題
- 1. C++從具有相同名稱的成員的基類繼承多重繼承
- 2. 具有相同名稱的虛擬成員函數的繼承
- 3. 如何在繼承中訪問具有相同名稱的成員
- 4. 具有相同函數名稱的C++繼承
- 5. Java繼承的混亂,具有超類和子類的成員變量相同的名稱
- 6. C++繼承和類成員
- 7. C#錯誤,成員具有相同名稱的
- 8. 具有相同名稱的嵌套類和成員函數
- 9. PHP繼承:子類與父類具有相同的類名
- 10. 具有相同方法名稱的多個接口的繼承
- 11. 抽象類繼承具有相同函數名稱的另一個抽象類
- 12. 從接口繼承具有相同名稱
- 13. 具有不同類型的相同成員的C++類
- 14. 具有相同變量名的Scala類繼承
- 15. 訪問具有相同變量名稱的不同類型的Super成員
- 16. 調用成員C++的功能,但C函數具有相同的名稱
- 17. 虛擬繼承和同名成員
- 18. IL Emit基類名稱與繼承類相同; protobuffer不接受環狀繼承
- 19. 如果一個分類繼承自一個類,那麼所有其他具有相同名稱的分類也應該繼承相同的基類?
- 20. MDX:如何聚合層級成員具有相同名稱的
- 21. C++ - 具有相同名稱的函數
- 22. 具有相同名稱的c#屬性
- 23. 具有相同類名稱的Dll
- 24. 類具有相同的名稱「則actionsList」
- 25. 具有相同方法名稱但不同參數的多繼承創建TypeError
- 26. 私有成員的繼承
- 27. C++中相同的類成員名稱和函數參數名稱
- 28. C#成員變量繼承
- 29. C++保護成員繼承
- 30. C++繼承超載成員
你應該問的問題是爲什麼你有相同的繼承層次結構中具有不同名稱成員的類?請參閱有效的C++項目33. – TheJuice 2010-04-13 16:18:25
如果您的問題是如何從基本引用或指針訪問派生方法,請添加註釋。正如它寫的那樣,這個問題可以用兩種方式來解釋(所有答案都只涉及其中的一個) – 2010-04-13 16:49:30