2012-09-16 52 views
2
#include<iostream> 
using namespace std; 

class A 
{ 
    private: 
     int value; 
    public: 
     A(int init):value(init){} 
     void changevalue(A &a){a.value = 100;}//why a's value can be changed? 
     void printvalue(){cout << value << endl;} 
}; 

int main(int argc , char *argv[]) 
{ 
    A a(2); 
    A b(3); 

    a.changevalue(b); 
    b.printvalue(); 

    return 0; 
} 

一個一個類的實例,一個名爲私人價值,但爲什麼這種私人價值是可以改變的?這個參數列表是否包含在類的範圍內?爲什麼可以通過類實例更改obj的私有值?

+0

你在你的類中提供該接口。如果你不想讓一個對象改變另一個對象,那麼不提供這個接口會解決你的問題。這個類本身就是訪問私有內容的東西,但不是實例。 – chris

回答

8

因爲類訪問說明符適用於每個類而不是每個對象的基礎。

您可以隨時在類函數內修改相同類型的對象。通常的示例是複製構造函數和複製賦值運算符。

5

private並不意味着「私人的對象身份」,但「私人的類型(和朋友)」。

請注意,可訪問性和能夠寫入類型是正交概念。你總是可以在自己的類型的對象內訪問的私人價值,而是你是否可以寫入與否取決於如果對象被聲明爲const

void f(A& a){ a.value = 4; } // OK: 'a' is not 'const' 
void g(A const& a){ a.value = 4 } // error: 'a' is marked as ' const' 
相關問題