品private成員的訪問控制

2021-05-23 07:57:10 字數 1388 閱讀 7836

首先,我們來回顧下,關於public和private的定義。如下定義,出自c++ primer中文版p368:

public:在public部分定義的成員可被使用該型別的所有**訪問。

private:在private部分定義的成員可被其他類成員訪問。

好了,大家先回顧自己理解的public、private和上述的定義是否有所出入。我在這裡先舉兩個可見性問題的例子,當然了,常見的我就不提了。

example 1:

#include

#include

using namespace std;

class knowledge

knowledge(string str)

~knowledge()

public:

void printsecret(string str)

private:

string m_strsecret;

};void main()

knowledge(string str)

~knowledge()

public:

void printsecret(knowledge kntmp)

private:

string m_strsecret;

};void main()

{knowledge a("my secret is a secret!");

knowledge b;

b.printsecret(a);

編譯執行輸出結果如下:

my secret is a secret!

好了,比較上述兩個例子,大家有什麼發現嗎?對了,即私有成員在類的外部是不可見的。但是如果是本類的成員函式裡面的話呢,該物件例項裡的私有成員馬上又變成了可見的。即類的私有成員,對於所有的該類(不是單獨某個物件例項)的成員都是可見的。

再回到開始對於private的定義,"private部分定義的成員可被其他類成員訪問".先說下"訪問",假設x為類a的資料成員或函式,那麼其實就是能用a.x(例項外部)或者是this->x(例項內部)這兩種形式訪問private成員。定義的這句話有兩層含義:

一、 在同乙個物件例項中,該例項中的所有成員都能訪問private成員。

二、 在乙個物件例項成員函式等類成員裡面,能訪問同類的另乙個物件例項的private成員。

tip:

對於第二條,如果類成員是函式,則必須是在函式體內部,即花括號裡面,另乙個物件例項的private才是可見的;

在函式的()中的函式引數是不能訪問另乙個物件例項的private成員的。

對於第一條,則沒有此限制。

看完後,再想想類的拷貝建構函式,是不是有恍然大悟的感覺。哦,原來,拷貝建構函式裡面之所以能訪問物件的私有成員的秘密就在這裡啊。ok,my secret is this.

private和public稱為成員訪問限定符

private和public稱為成員訪問限定符 member access specifier 除了private和public之外,還有一種成員訪問限定符protected 受保護的 用protected宣告的成員稱為受保護的成員,它不能被類外訪問 這點與私有成員類似 但可以被派生類的成員函式訪問...

C 訪問控制之private剖析

今天在看c primer,寫過載操作運算子練習程式的時候,在成員函式中直接操作形參中同型別物件的private成員,程式如下 operatoroverload operatoroverload operator const operatoroverload op 程式居然可以編譯通過,讓我對priv...

如何訪問類中的private成員變數

總所周知,類中的private屬性的成員變數在類外是無法訪問的,今天我們 的就是如何在類外訪問private屬性的成員變數。我們先來看乙個簡單的例子 class stu private int x int y int main 通過上面的 我們可以知道,方法是把類物件的位址強制轉化為int 型別,因...