c++属于同一个类的不同对象之间可相互访问private和protected成员

先看一个代码例子:

#include 

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成员,就无法实现了。

你可能感兴趣的:(编程语言,c++,属于一个类,不同对象,private,私有成员)