在学习拷贝构造函数的时候,突然发现拷贝构造函数里面可以访问私有成员。当时很疑惑,和c++类的private私有属性不同。但是编译器可以编译通过。
class MyString
{
public:
MyString(int len = 0);
MyString(const MyString& s);
~MyString();
private:
int m_len;
};
MyString::MyString(const MyString& s)
{
m_len = s.m_len;
m_p = new char[m_len + 1];
strcpy(m_p, s.m_p);
}
引用C++标准原文
A member of a class can be
— private; that is, its name can be used only by members and friends of the class in which it is
declared.
— protected; that is, its name can be used only by members and friends of the class in which it is
declared, and by members and friends of classes derived from this class (see 11.5).
— public; that is, its name can be used anywhere without access restriction.
访问限制标号是针对类而不是针对一个类的不同对象,只要同属一个类就可以不用区分同一个类的不同对象。因为 是类的成员函数,所以有权限访问私有数据成员。如果是在main函数中直接,那肯定就会报错了,不能访问,因为这是在类外不能访问私有数据成员。一个类的成员函数可以访问这个类的私有数据成员,我们要理解这个对类的访问限制,而不是针对对象。
参考:http://http://blog.csdn.net/peng314899581/article/details/51895998