C++ 教程
數(shù)據(jù)封裝是面向?qū)ο缶幊痰囊粋€(gè)重要特點(diǎn),它防止函數(shù)直接訪問類類型的內(nèi)部成員。類成員的訪問限制是通過在類主體內(nèi)部對(duì)各個(gè)區(qū)域標(biāo)記 public、private、protected 來指定的。關(guān)鍵字 public、private、protected 稱為訪問修飾符。
一個(gè)類可以有多個(gè) public、protected 或 private 標(biāo)記區(qū)域。每個(gè)標(biāo)記區(qū)域在下一個(gè)標(biāo)記區(qū)域開始之前或者在遇到類主體結(jié)束右括號(hào)之前都是有效的。成員和類的默認(rèn)訪問修飾符是 private。
公有成員在程序中類的外部是可訪問的。您可以不使用任何成員函數(shù)來設(shè)置和獲取公有變量的值,如下所示:
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
Length of line : 6 Length of line : 10
私有成員變量或函數(shù)在類的外部是不可訪問的,甚至是不可查看的。只有類和友元函數(shù)可以訪問私有成員。
默認(rèn)情況下,類的所有成員都是私有的。例如在下面的類中,width 是一個(gè)私有成員,這意味著,如果您沒有使用任何訪問修飾符,類的成員將被假定為私有成員:
實(shí)際操作中,我們一般會(huì)在私有區(qū)域定義數(shù)據(jù),在公有區(qū)域定義相關(guān)的函數(shù),以便在類的外部也可以調(diào)用這些函數(shù),如下所示:
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
Length of box : 10 Width of box : 10
保護(hù)成員變量或函數(shù)與私有成員十分相似,但有一點(diǎn)不同,保護(hù)成員在派生類(即子類)中是可訪問的。
在下一個(gè)章節(jié)中,您將學(xué)習(xí)到派生類和繼承的知識(shí)。現(xiàn)在您可以看到下面的實(shí)例中,我們從父類 Box 派生了一個(gè)子類 smallBox。
下面的實(shí)例與前面的實(shí)例類似,在這里 width 成員可被派生類 smallBox 的任何成員函數(shù)訪問。
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
Width of box : 5
有public, protected, private三種繼承方式,它們相應(yīng)地改變了基類成員的訪問屬性。
1.public 繼承:基類 public 成員,protected 成員,private 成員的訪問屬性在派生類中分別變成:public, protected, private
2.protected 繼承:基類 public 成員,protected 成員,private 成員的訪問屬性在派生類中分別變成:protected, protected, private
3.private 繼承:基類 public 成員,protected 成員,private 成員的訪問屬性在派生類中分別變成:private, private, private
但無論哪種繼承方式,上面兩點(diǎn)都沒有改變:
1.private 成員只能被本類成員(類內(nèi))和友元訪問,不能被派生類訪問;
2.protected 成員可以被派生類訪問。