c++属于同一个类的不同对象之间可相互访问private和protected成员
先看一个代码例子:
#include <stdio.h>
class A {
private:
char* name;
void printA_Name() const {
printf(name);
}
public:
A(char* name) {
this->name = name;
}
void printA_Name(const A& a) {
printf(a.name);
}
void printA_Name2(const A& a) {
a.printA_Name();
}
};
int main(void)
{
A a1("a1");
A a2("a2");
a2.printA_Name(a1);
a1.printA_Name2(a2);
}
这个例子是能正常编译通过。按照c++的语法,一个对象的私有成员或保护成员不能在类的外部被访问。但是有个例外,同属于一个类的不同对象之间可相互访问private和protected成员(包括成员变量或成员函数)。原来关键字private和protected是基于类的而不是基于对象的。这样的设计多少有点破坏了封装的思想,可是没有办法,考虑这样一种情况:在实现类的拷贝构造函数和赋值运算符的时候,就需要去访问另一个对象的private和protected成员(如果有的话),假如限制了同属于一个类的不同对象之间去访问private和protected成员,就无法实现了。