一個(gè)奇怪的發(fā)現(xiàn):對(duì)象可以訪問(wèn)類的私有成員
原文地址: http://blog.sina.com.cn/s/blog_4a8ed95f0100053d.html
class String
{
public:
String& operator= (const String&str)
{
//為什么在這里可以直接訪問(wèn)str對(duì)象的私有成員呢??
????size = str.size;??
{
public:
String& operator= (const String&str)
{
//為什么在這里可以直接訪問(wèn)str對(duì)象的私有成員呢??
????size = str.size;??
}
??private:
????int size;
};
****************************************************
網(wǎng)上答案:
1。
封裝性是對(duì)類(不是對(duì)象)外的
操作來(lái)說(shuō)的。所以在類內(nèi)操作本類的一個(gè)對(duì)象來(lái)說(shuō),這個(gè)類可以訪問(wèn)類的所有成員變量。
因?yàn)轭愔?,他現(xiàn)在處理就是他自己的一個(gè)對(duì)象。
操作來(lái)說(shuō)的。所以在類內(nèi)操作本類的一個(gè)對(duì)象來(lái)說(shuō),這個(gè)類可以訪問(wèn)類的所有成員變量。
因?yàn)轭愔?,他現(xiàn)在處理就是他自己的一個(gè)對(duì)象。
?
2。
相同類的對(duì)象在類的內(nèi)部可以調(diào)用private成員
?
3.
這個(gè)函數(shù)是在 class?String 類體里面的,
所以被認(rèn)為是在同一個(gè)域里,也就是類域。
所以這個(gè)時(shí)候?str 是允許訪問(wèn)?size?的。
但如果你在 main 里str.size 就不行了,不在一個(gè)域。
所以被認(rèn)為是在同一個(gè)域里,也就是類域。
所以這個(gè)時(shí)候?str 是允許訪問(wèn)?size?的。
但如果你在 main 里str.size 就不行了,不在一個(gè)域。
?
4.
Standard C++ 98 has mentioned:
"A member of a class can?be
"A member of a class can?be
??--private; its name can be used only by menbers and?friends of the class in?which it is declared."
?
----------------------------------------------------------------------------------------------------------
以下是風(fēng)箏的自己理解。
1
public
class
A {
2
private
double
_price = 2.0;
3
4
public
A(){
5
}
6
7
public
A(A a){
8
this
._price = a._price;
9
}
10
11
public
void
dis(A a){
12
System.out.println(a._price);
//
正確!因?yàn)椤白约胰耍╝)在家里”
13
}
14
public
static
void
main(String[] args){
15
//
A._price = 3.0; 錯(cuò)誤!因?yàn)椤白约胰耍ˋ)在外地(main)”
16
A a =
new
A();
17
A b =
new
A(a);
18
a.dis(b);
19
}
20
}
輸出結(jié)果:2.0
?
1、編程語(yǔ)言中的訪問(wèn)控制符如public、protected和private等等是針對(duì)此類外的類型、對(duì)象來(lái)說(shuō)的。
2、在類的方法成員內(nèi)部(包括構(gòu)造函數(shù))訪問(wèn)同一個(gè)類對(duì)象的私有成員時(shí),有些訪問(wèn)控制符是不起作用的,它們?cè)谕粋€(gè)域內(nèi)。
3、通過(guò)上面的代碼,突然想到在構(gòu)造函數(shù)中的this豈不也是一個(gè)類對(duì)象,它就能訪問(wèn)本類的私有成員"_price"!所以private是對(duì)“外人(如main中)”或者“自家人(A)在外地(main)”來(lái)說(shuō)的。
?
沒(méi)想到學(xué)了這么多年竟然沒(méi)有注意到此問(wèn)題,唉!記與此,勿忘!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

