class IntVec
{
public:
IntVec();
IntVec(int siz);
IntVec(const IntVec& temp);
~IntVec();
private:
int* arr;
int size;
};
IntVec::IntVec()
{
size = 2;
arr = new int[size];
}
IntVec::IntVec(int siz)
{
size = siz;
arr = new int[size];
}
IntVec::IntVec(const IntVec& temp)
{
size = temp.size; // Why does this not cause an error? size is a private variable of object temp.
arr = new int[size];
for (int i = 0; i < size; i++)
{
arr[i] = temp.arr[i]; // Why doesn't this cause an error? arr is a private variable of object temp.
}
}
IntVec::~IntVec()
{
delete[] arr;
}
int main()
{
IntVec test1(2);
cout << test1.size; // Causes error (expected), since size is private.
}
我不清楚为什么我可以在复制构造函数中访问temp的大小和arr变量,因为它们是私有变量。为什么我在main()中遇到错误是有道理的,但我不确定为什么我在Copy Constructor中没有出错。
答案 0 :(得分:2)
这是因为public / protected / private引用了类而不是单个对象。因此,类中的所有对象以及静态方法都可以访问每个内部。
答案 1 :(得分:2)
size = temp.size; // Why does this not cause an error? size is a private variable of object temp.
您误解了访问规则。
访问规则不适用于每个对象。
它们适用于类型和功能。
temp
的类型为IntVec
。可以在IntVec
的任何成员函数中访问IntVec
类型的对象的任何成员。
其他类的非成员函数和成员函数将无法访问private
类型对象的IntVec
成员。
答案 2 :(得分:1)
答案 3 :(得分:0)
这是因为access specifiers是有效的每个类,而不是每个对象。因此,类方法可以访问类的任何实例的私有成员。
类的所有成员(成员函数体,成员对象的初始值设定项和整个嵌套类定义)可以访问类可以访问的所有名称。 / strong>成员函数中的本地类可以访问成员函数本身可以访问的所有名称。