C 的乙個問題的理解(私有變數成員)

2021-09-08 19:31:32 字數 1373 閱讀 5505

class

cexample

~cexample()

cexample(

const cexample&);

void init(int n)

private

:

char *pbuffer;

intnsize;

};cexample::cexample(

const cexample&rightsides)

感嘆號部分我很奇怪,不是不允許物件許訪問私有變數成員麼?怎麼回事,而且還能編譯通過。

1.為什麼物件a可以直接訪問私有的x(a.x)成員見

給出了乙個解答:因為a(const a&a)是他的成員函式。

在我的例子也是如此:cexample::cexample(const cexample& rightsides)是cexample的成員函式,所以可以訪問同型別物件的私有成員。即righsides.nsize的呼叫可以編譯用過,但是,你在main函式裡面直接寫上:

int main(int argc, char*ar**)

編譯器肯定是報錯,提示你nsize是私有變數,不允許物件進行訪問。

隨後,我又做了乙個實驗:

#include using

namespace

std;

class

t;class

ctest

;int print1(const ctest &);

int print2(const t&);

private:

intm_data;

};ctest::ctest()

ctest::ctest(

const ctest&arg)

ctest & ctest::operator = (const ctest &arg)

int ctest :: print1(const ctest &arg)

int ctest::print2(const t&arg)

intmain()

請注意print()、print1()、print2()的區別;

print()自然不用說,成員函式訪問類的私有變數,編譯通過;

print1():print1是ctest類的成員函式,而print1的形參是const ctest& arg,arg的型別就是ctest,根據成員函式可以訪問私有變數,故編譯通過

print2():print2是ctest類的成員函式,但是print2的形參型別是t,不是ctest,print2不是t的成員函式,不能訪問類的私有變數,故編譯不能通過

**:

C 的乙個問題的理解(私有變數成員)

這個題目很奇怪啊,今天下午在看拷貝建構函式的時候,突然看到了很奇怪的一句話 class cexample cexample cexample const cexample void init int n private char pbuffer int nsize cexample cexample...

C 的乙個問題的理解(私有變數成員)

這個題目很奇怪啊,今天下午在看拷貝建構函式的時候,突然看到了很奇怪的一句話 cpp view plain copy class cexample cexample cexample const cexample void init intn private char pbuffer intnsize...

C 乙個類呼叫另乙個類的成員變數 成員函式

有時候,兩個類之間並沒有繼承的關係,但是其中乙個類需要引用另乙個類中的成員變數或者成員函式。怎樣辦到呢?假設已經新建了兩個類a b。class a class b 現在需要在類a的成員函式中呼叫類b的成員變數b nadd b x,使得a nadd與b nadd相加,那麼只需要在類a的.cpp檔案中包...