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