类对象可以访问自己的私有成员?

来源:百度知道 编辑:UC知道 时间:2024/05/27 16:34:18
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~ String(void); // 析构函数
String & operate =(const String &other); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
其中
// 拷贝构造函数
String::String(const String &other)
{
int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data, other.m_data);
}
问题来了,类对像other,怎么可以访问自己的私有成员呢?
搞到解答,如下:
权限是相对外部来说的,而你类内部的实现是不受限制的.连开发这个类的人都隐藏 "细节 ",意义何在?
"隐藏 "细节指的是隐藏实现,让使用方可以通过接口来使用,而内部的实现就可以在保持接口不变的情况下进行改动了.
语法上来说,类存在一个空间,就是类空间(Type::),类外部空间和内部空间之间存在权限制度,
同一空间是不受权限的影响的.成员函数之类的是在内部空间中定义的,因此也不受限制.还应该注意,这是相对
类来说,而不是相对对象来说.不是不同的对象就不能访问权限影响的成员,而是所处的类空间的不同才是权限产生作用的依据.

这就好比this指针
成员函数就是一接口,通过接口可以访问任何本类私有成员
>
>
>补充一下,对这个问题,我也有点晕,呵呵,换一个角度来考虑,
私有成员变量或函数存在的目的是为了使 类 达到封装和隐蔽的效果,类的封装好坏直接影响到类的完善与否和功能强弱。但是类的封装行是对于类对象而言的,而不是本类的本身,如果一个人能够达到了可以改写本类成员函数的权限,那么,封装和隐蔽还有什么作用呢?如果你可以直接改写类,那么这个类的封装已经暴露在你眼前,信息的隐蔽也就无从谈起了,所以说,本类的成员函数调用本类的对象(包括参数形式)是没有必要进行信息的封装和隐蔽的,因为这是没有意义的。

  成员函数就是一接口,通过接口可以访问任何本类私有成员 。
私有成员变量或函数存在的目的是为了使 类 达到封装和隐蔽的效果,类的封装好坏直接影响到类的完善与否和功能强弱。但是类的封装行是对于类对象而言的,而不是本类的本身,如果一个人能够达到了可以改写本类成员函数的权限,那么,封装和隐蔽还有什么作用呢?如果你可以直接改写类,那么这个类的封装已经暴露在你眼前,信息的隐蔽也就无从谈起了,所以说,本类的成员函数调用本类的对象(包括参数形式)是没有必要进行信息的封装和隐蔽的,因为这是没有意义的。

直观的看,
如果连类的成员函数都不能访问私有的成员变量的话,那么这个私有变量将永远不可能被用起来,因为本类的成员函数访问不到,外界的函数也访问不到。没有任何意义。

在类自己的成员函数及类的友元类和类的友元函数里是允许访问私有成员的,如果是在非类的成员函数或友元类或友元函数中是不可能的,你可以试试