在C++中,为什么我可以调用一个类中的私有内容的vector ::(开始)?

在C++中,为什么我可以调用一个类中的私有内容的vector ::(开始)?,c++,class,C++,Class,大体上,我首先构造aaa,然后打印出它的值。下一个aaa在调用bbb.testfnaaa后更改。在void AAA::testfn中,我可以直接访问AAA.v,并且AAA.v[0]的值确实在void AAA::testfn之外发生了更改。因为我在主函数的末尾打印了aaa.v,所以它显示的是这样的。原因是什么?隐私是类限制而不是实例限制。类的所有实例都可以完全访问所有其他实例的私有成员 继承、受保护和不同的实例有一些奇怪的地方,但这是另一个问题。@JohnKugelman它已经更新。那么,你是从A

大体上,我首先构造aaa,然后打印出它的值。下一个aaa在调用bbb.testfnaaa后更改。在void AAA::testfn中,我可以直接访问AAA.v,并且AAA.v[0]的值确实在void AAA::testfn之外发生了更改。因为我在主函数的末尾打印了aaa.v,所以它显示的是这样的。原因是什么?

隐私是类限制而不是实例限制。类的所有实例都可以完全访问所有其他实例的私有成员


继承、受保护和不同的实例有一些奇怪的地方,但这是另一个问题。

@JohnKugelman它已经更新。那么,你是从AAA类的范围内呼叫的吗?@aschepler是的。你的问题是为什么你可以访问AAA类中的AAA类隐私,或者为什么你可以通过a.v.以双*开头?@Tas这是我的问题。我可以做到这一点而不会引起任何错误或警告。在我自己的代码中,数字是正确的。这些数字没有0那么简单。谢谢你的解释。
#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();
}