C++ Qt 访问权限总结
總結(jié):C++的訪問修飾符的作用是以類為單位,而不是以對象為單位。
?
通俗的講,同類的對象間可以“互相訪問”對方的數(shù)據(jù)成員,只不過訪問途徑不是直接訪問.
步驟是:通過一個對象調(diào)用其public成員函數(shù),此成員函數(shù)可以訪問到自己的或者同類其他對象的public/private/protected數(shù)據(jù)成員和成員函數(shù)(類的所有對象共用),而且還需要指明是哪個對象的數(shù)據(jù)成員(調(diào)用函數(shù)的對象自己的成員不用指明,因為有this指針;其他對象的數(shù)據(jù)成員可以通過引用或指針間接指明)
?
?
?
C++中public,protected,private訪問小結(jié)
1、private,public,protected方法的訪問范圍.(public繼承下)
private: 只能由該類中的函數(shù)、其友元函數(shù)訪問,不能被任何其他訪問,該類的對象也不能訪問.?
protected: 可以被該類中的函數(shù)、子類的函數(shù)、以及其友元函數(shù)訪問,但不能被該類的對象訪問?
public: 可以被該類中的函數(shù)、子類的函數(shù)、其友元函數(shù)訪問,也可以由該類的對象訪問
注:友元函數(shù)包括兩種:設(shè)為友元的全局函數(shù),設(shè)為友元類中的成員函數(shù)
?
2、類的繼承后方法屬性變化:?
使用private繼承,父類的所有方法在子類中變?yōu)閜rivate;?
使用protected繼承,父類的protected和public方法在子類中變?yōu)閜rotected,private方法不變;?
使用public繼承,父類中的方法屬性不發(fā)生改變;?
?
| ? | public: | protected: | private: |
| public繼承 | public | protected | --- |
| protected繼承 | protected | protected | --- |
| private繼承 | private | private | --- |
?
?
protected繼承和private繼承能降低訪問權(quán)限
?
再次提到:可以提供訪問行為的主語為“函數(shù)”。
類體內(nèi)的訪問沒有訪問限制一說,即private函數(shù)可以訪問public/protected/private成員函數(shù)或數(shù)據(jù)成員,同理,protected函數(shù),public函數(shù)也可以任意訪問該類體中定義的成員
public繼承下,基類中的public和protected成員繼承為該子類的public和protected成員(成員函數(shù)或數(shù)據(jù)成員),然后訪問仍然按類內(nèi)的無限制訪問
?
?
Qt信號槽的訪問限制
?
?
1、關(guān)鍵字signals指出隨后開始信號的聲明,這里signals用的是復(fù)數(shù)形式而非單數(shù),siganls沒有public、private、protected等屬性,這點不同于slots。另外,signals、slots關(guān)鍵字是QT自己定義的,不是C++中的關(guān)鍵字。
?
2、槽也是普通的C++函數(shù),可以一樣被調(diào)用,他唯一的特點就是 他們可以被信號連接。因為槽就是普通的成員函數(shù),它們也和普通的成員函數(shù)一樣有訪問權(quán)限,一個槽的訪問權(quán)限決定了哪些信號可以和它相連接,而信號就沒有訪問權(quán)限的概念。
?
一個public slots:區(qū)包含了任何信號都可以相連的槽。你生成了許多對象,它們互相并不知道,把它們的信號和槽連接起來,這樣信息就可以正確地傳遞,并且就像一個鐵路模型,把它打開然后讓它跑起來。
?
一個protected slots:區(qū)包含了之后這個類和它的子類的信號才能連接的槽。這就是說這些槽只是類的實現(xiàn)的一部分,而不是它和外界的接口。
?
一個private slots:區(qū)包含了之后這個類本身的信號可以連接的槽。這就是說它和這個類是非常緊密的,甚至它的子類都沒有獲得連接權(quán)利這樣的信任。
?
轉(zhuǎn)載于:https://www.cnblogs.com/lvdongjie/p/3758177.html
總結(jié)
以上是生活随笔為你收集整理的C++ Qt 访问权限总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python猫荐书系列之七:Python
- 下一篇: Java开发笔记(一百零三)线程间的通信