先看一个代码例子:
#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成员,就无法实现了。