在C++指定的3個不同的訪問說明符(public,private,protected)下聲明虛函數時,可訪問性的規則是什麼 每個函數的意義是什麼?任何簡單的代碼示例來解釋這個概念將非常有用。訪問說明符和虛函數
回答
訪問說明符的應用方式與在名稱查找過程中對其他任何名稱的應用方式相同。功能是虛擬的這一事實根本不重要。
在虛擬功能方面有時會發生常見錯誤。
如果名稱查找將可行函數確定爲虛函數,則在用於命名該函數的對象表達式的靜態類型的範圍內檢查虛函數的訪問說明符。在運行時,要調用的實際函數可以使用完全不同的訪問說明符在派生類中定義。這是因爲'訪問說明符'是編譯時間表單子。
// Brain compiled code ahead
struct A{
virtual void f() {}
private:
virtual void g() {}
protected:
virtual void h() {}
};
struct B : A{
private:
virtual void f() {} // Allowed, but not a good habit I guess!
};
B b;
A &ra = b;
ra.f(); // name lookup of 'f' is done in 'A' and found to be public. Compilation
// succeeds and the call is dynamically bound
// At run time the actual function to be called is 'B::f' which could be private, protected etc but that does not matter
謝謝!很好的解釋。 – 2010-09-24 10:48:36
「大腦編譯代碼」大聲笑,這是@ sbi的模式。也許我應該從我的代碼開始介紹這種介紹。經常發生我的代碼腦死亡 – 2010-09-25 12:31:29
@Johannes Schaub - litb::), – Chubsdad 2010-09-25 12:59:37
在基類中使用虛函數就像普通函數(純虛函數除外)一樣。
從我的頭頂總結:
公共職能的任何人都可以訪問。 私有函數只能訪問類和其朋友 受保護的函數就像私有函數一樣,只有它們可以被派生類訪問。
public是接口,而private/protected函數是內部的。 還要注意,所有的局部變量(根據封裝)應該被保護/私有。
現在,當它涉及到派生類,你派生類是這樣的:
class A : [public | protected | private] B
{
};
現在,公共/私營/保護盈B的資格規定限制最少的安全級別從基繼承類。對於方法和局部變量來說,這不是一個「過濾器」,因爲有些不是繼承的,只是將它們的安全級別更改爲指定的安全級別,如果它們的限制較少(更公開)。
因此class A : public B
將離開繼承的基本成員, class A : private B
會將它們全部更改爲私有成員。
希望這對你有意義並回答你的問題。如果沒有,告訴我!
- 1. 訪問說明符
- 2. Java - 訪問說明符
- 3. Apex訪問說明符和測試類
- 4. 訪問說明符和訪問修飾符有什麼區別?
- 5. 訪問說明
- 6. 接口聲明的訪問說明符
- 7. Java:變量訪問說明符
- 8. =默認忽略訪問說明符?
- 9. C#內部訪問說明符,
- 10. 函數說明
- 11. 訪問修飾符和訪問說明符之間有什麼區別
- 12. jQuery函數聲明說明
- 13. array.splice()函數說明
- 14. Python函數說明
- 15. 生成Java高階函數與訪問說明
- 16. 函數說明返回字符串?
- 17. 類成員訪問說明符和二進制代碼
- 18. 類有虛函數和可訪問的非虛擬析構函數
- 19. 說明參數argparse.ArgumentParser()函數
- 20. C++前向聲明和純虛函數
- 21. Verilog等待函數說明
- 22. 函數指針的說明
- 23. C++線程函數說明
- 24. 問虛函數
- 25. C++:類和函數的名稱空間說明符
- 26. 如何用字符串中的數據替換訪問說明符?
- 27. 引入受保護訪問說明符的原理
- 28. C++的默認繼承訪問說明符?
- 29. 使用相同的C++訪問說明符多次
- 30. 爲什麼有多個公共訪問說明符standard_layout的類?
訪問關於她的關於關於 – 2010-09-24 13:34:02