在C++中,为什么我可以在<double>类中调用 vector::begin() 来获取私有内容?

In C++, why can I call vector<double>::begin() in for a private content in a class?

本文关键字:获取 begin 调用 为什么 C++ 我可以 lt gt double vector      更新时间:2023-10-16
#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();
}

在main中首先构造aaa,然后打印出它的值。呼叫bbb.testfn(aaa)后,下一步更改aaa。在void AAA::testfn()中,我可以直接访问aaa.v, aaa.v[0]的值确实在void AAA::testfn()之外发生了变化。因为我在main函数的末尾打印了aaa.v,所以它显示了。这是什么原因呢?

隐私是类限制而不是实例限制。类的所有实例对所有其他实例的私有成员具有完全访问权。

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