2016-10-17 2 views
-3
#include<iostream> 
#include<vector> 
#include<string> 

using namespace std; 

class AAA { 
private: 
    vector<double> v; 

public: 
    AAA(int n); 
    void AAAprint(); 
    void testfn(AAA &aaa); 
}; 

AAA::AAA(int n){ 
    v=vector<double>(n,0); 
} 

void AAA::AAAprint(){ 
    for (int i=0;(unsigned int) i<v.size();i++) 
    { 
     std::cout<<v[i]<<" "; 
    } 
    std::cout<<std::endl; 
} 

void AAA::testfn(AAA &aaa) 
{ 
    aaa.v[0]=5; 
} 

int main(){ 
    AAA aaa(25); 
    aaa.AAAprint(); 
    AAA bbb(25); 
    bbb.testfn(aaa); 
    aaa.AAAprint(); 
} 

メインでは最初にaaaを作成し、その値を出力します。 bbb.testfn(aaa)を呼び出した後にaaaが変更されました。 void AAA::testfn()では、aaa.vに直接アクセスできました。aaa.v[0]の値は実際にはvoid AAA::testfn()の外部に変更されています。私はmain関数の最後にaaa.vを出力しているので、それはそうです。これの理由は何ですか?C++では、クラス内のプライベートコンテンツのベクトル<double> :: begin()を呼び出すことができますか?

+0

@JohnKugelman更新されました。 – Resorter

+0

さて、クラスAAAのスコープから呼び出していますか? – aschepler

+0

@ascheplerはい。 – Resorter

答えて

1

Privcyはインスタンスの制限ではなくクラスの制限です。クラスのすべてのインスタンスは、他のすべてのインスタンスのプライベートメンバーにフルアクセスできます。

継承と保護された別個のインスタンスについては、いくつかの欠点がありますが、それは別の質問です。

+0

説明をありがとう。 – Resorter

関連する問題