复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?

How is the copy assignment function accessing private members of the other object (Stroustroup Principles and Practice book)?

本文关键字:Stroustroup 成员 原则 一个对象 函数 赋值 何访问 复制 访问      更新时间:2023-10-16

我一直在阅读"编程:使用C++的原则和实践,第 2 版"的第 18.3.2 章,其中描述了矢量复制赋值操作。这是书中提出的想法:

class vector {
int sz;
double* elem;
public:
vector& operator=(const vector&) ;         // copy assignment
// . . .
};

根据此类定义,int szdouble* elemvector类的私有成员。

现在,复制分配定义为

vector& vector::operator=(const vector& a)
// make this vector a copy of a
{
double* p = new double[a.sz];              // allocate new space
copy(a.elem,a.elem+a.sz,elem);            // copy elements
delete[] elem;                             // deallocate old space
elem = p;                                  // now we can reset elem
sz = a.sz;
return *this;                             // return a self-reference
}

我将其理解为:a作为重载operator=函数的const vector&传递。但是在定义的第二行中,对std::copy()的调用能够以某种方式访问a.elema.sz,据我了解,它们是a引用的对象的私有成员。我只是不明白这怎么可能。

我在这里错过了什么?提前感谢您的回答!

访问控制是按类的,而不是按实例的:A的任何成员都可以访问任何类型为A的对象的任何成员。 有一个例外,即派生类的成员只能通过派生类型的对象(或通过该类型本身进行静态成员访问(访问基类protected成员。