一文詳解C++的訪問(wèn)說(shuō)明符
C++ 訪問(wèn)說(shuō)明符
訪問(wèn)說(shuō)明符是 C++ 中控制類成員(屬性和方法)可訪問(wèn)性的關(guān)鍵字。它們用于封裝類數(shù)據(jù)并保護(hù)其免受意外修改或?yàn)E用。
三種訪問(wèn)說(shuō)明符:
public
:允許從類外部的任何地方訪問(wèn)成員。private
:僅允許在類內(nèi)部訪問(wèn)成員。protected
:允許在類內(nèi)部及其派生類中訪問(wèn)成員。
示例:
class Person { public: string name; // 公共屬性,可從外部訪問(wèn) private: int age; // 私有屬性,僅在類內(nèi)部可見(jiàn) protected: string address; // 受保護(hù)屬性,可在類及其派生類中訪問(wèn) };
解釋:
- 在
Person
類中,name
屬性是公共的,這意味著可以在類外部創(chuàng)建對(duì)象并直接訪問(wèn)該屬性:
Person p1; p1.name = "Alice";
age
屬性是私有的,只能在類內(nèi)部的成員函數(shù)中訪問(wèn):
Person p2; // p2.age = 30; // 錯(cuò)誤:age 是私有的
address
屬性是受保護(hù)的,可以在Person
類及其派生類中訪問(wèn):
class Employee : public Person { public: void printAddress() { cout << address << endl; // 可以訪問(wèn)受保護(hù)屬性 } };
總結(jié):
- 使用訪問(wèn)說(shuō)明符來(lái)封裝類數(shù)據(jù),使其免受意外修改或?yàn)E用。
- 將屬性默認(rèn)設(shè)置為私有,并在需要時(shí)顯式將其設(shè)置為 public 或 protected。
- 僅在必要時(shí)使用 public 訪問(wèn)權(quán)限,并優(yōu)先使用 private 或 protected 以提高安全性。
附加說(shuō)明:
- 靜態(tài)成員函數(shù)通常具有 public 訪問(wèn)權(quán)限,因?yàn)樗鼈兣c類本身相關(guān),而不是與特定對(duì)象相關(guān)。
- 訪問(wèn)說(shuō)明符僅控制訪問(wèn)權(quán)限,不能賦予修改權(quán)限。即使屬性是 public 的,也需要確保您有權(quán)對(duì)其進(jìn)行修改。
C++ 封裝
封裝是面向?qū)ο缶幊蹋∣OP)的核心概念之一,它強(qiáng)調(diào)將數(shù)據(jù)隱藏在實(shí)現(xiàn)細(xì)節(jié)之后,只暴露必要的接口進(jìn)行交互。在 C++ 中,封裝可以通過(guò)訪問(wèn)說(shuō)明符(public、private 和 protected)來(lái)實(shí)現(xiàn),并結(jié)合使用 setter 和 getter 方法來(lái)控制對(duì)私有數(shù)據(jù)的訪問(wèn)。
封裝的優(yōu)點(diǎn):
- 數(shù)據(jù)安全性: 封裝有助于保護(hù)數(shù)據(jù)免受意外修改或?yàn)E用,因?yàn)樗拗屏藢?duì)私有成員的直接訪問(wèn)。
- 代碼維護(hù)性: 封裝使代碼更易于理解和維護(hù),因?yàn)樗[藏了實(shí)現(xiàn)細(xì)節(jié),只暴露必要的接口。
- 代碼可重用性: 封裝的代碼通常更易于重用,因?yàn)樗梢元?dú)立于其他代碼進(jìn)行修改或擴(kuò)展。
在 C++ 中實(shí)現(xiàn)封裝:
- 使用訪問(wèn)說(shuō)明符: 將類成員(屬性和方法)聲明為
private
以隱藏它們,或聲明為public
以允許外部訪問(wèn)。 - 使用 setter 和 getter 方法: 為私有屬性創(chuàng)建公共的 getter 和 setter 方法,用于讀取和設(shè)置屬性值。
示例:
class Person { private: string name; int age; public: // Getter 方法 string getName() { return name; } // Setter 方法 void setName(string n) { name = n; } // Getter 方法 int getAge() { return age; } // Setter 方法 void setAge(int a) { age = a; } }; int main() { Person p1; p1.setName("Alice"); p1.setAge(30); cout << p1.getName() << " is " << p1.getAge() << " years old." << endl; return 0; }
解釋:
Person
類包含兩個(gè)私有屬性:name
和age
。- 為了訪問(wèn)這些屬性,提供了公共的 getter 和 setter 方法:
getName()
,setName()
,getAge()
和setAge()
。 - 在
main()
函數(shù)中,我們創(chuàng)建了一個(gè)Person
對(duì)象并使用 setter 方法設(shè)置其屬性值。 - 然后,我們使用 getter 方法獲取屬性值并輸出它們。
總結(jié):
封裝是 C++ 中面向?qū)ο缶幊痰闹匾?。通過(guò)有效地封裝類數(shù)據(jù),您可以提高代碼的安全性、維護(hù)性和可重用性。
最后
到此這篇關(guān)于一文詳解C++的訪問(wèn)說(shuō)明符的文章就介紹到這了,更多相關(guān)C++訪問(wèn)說(shuō)明符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt利用QSortFilterProxyModel代理實(shí)現(xiàn)自定義排序與聯(lián)合過(guò)濾
QsortFilterProxyModel類用來(lái)為model和view之間提供強(qiáng)大的排序和過(guò)濾支持。這篇文章將利用QSortFilterProxyModel代理實(shí)現(xiàn)自定義排序與聯(lián)合過(guò)濾,需要的可以參考一下2022-11-11利用Debug調(diào)試代碼解決0xC0000005:?讀取位置?0x0000000000000000?時(shí)發(fā)生訪問(wèn)沖突問(wèn)
這篇文章主要介紹了利用Debug調(diào)試代碼解決0xC0000005:?讀取位置?0x0000000000000000?時(shí)發(fā)生訪問(wèn)沖突,本文給大家分享完美解決方案,需要的朋友可以參考下2023-03-03C語(yǔ)言實(shí)現(xiàn)掃雷小項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08c++調(diào)用實(shí)現(xiàn)yolov5轉(zhuǎn)onnx介紹
大家好,本篇文章主要講的是c++調(diào)用實(shí)現(xiàn)yolov5轉(zhuǎn)onnx介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12QT實(shí)現(xiàn)定時(shí)關(guān)閉消息提示框
這篇文章主要介紹了軟件利用Qt簡(jiǎn)單實(shí)現(xiàn)消息提示框可定時(shí)自動(dòng)關(guān)閉,文中的示例代碼講解詳細(xì),對(duì)我們;了解QT有一定的幫助,感興趣的可以學(xué)習(xí)一下2022-01-01C++ 賦值構(gòu)造函數(shù)注意點(diǎn)介紹
下面小編就為大家?guī)?lái)一篇C++ 賦值構(gòu)造函數(shù)注意點(diǎn)介紹。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12C語(yǔ)言指針如何實(shí)現(xiàn)字符串逆序反轉(zhuǎn)
這篇文章主要介紹了C語(yǔ)言指針如何實(shí)現(xiàn)字符串逆序反轉(zhuǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07C語(yǔ)言實(shí)現(xiàn)音樂(lè)播放器的示例代碼
這篇文章主要和大家分享了一個(gè)C語(yǔ)言的小DEMO,可以實(shí)現(xiàn)音樂(lè)播放器功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-02-02