关闭

拷贝构造函数可以访问私有数据成员

标签: C++class拷贝构造私有数据成员访问控制
1253人阅读 评论(4) 收藏 举报
分类:
class CExample
{
public:
	CExample(){pBuffer=NULL; nSize=0;}
	~CExample(){delete pBuffer;}
	CExample(const CExample&); 
void Init(int n){ pBuffer=new char[n]; nSize=n;}
private:
	char *pBuffer; 
	int nSize;
};
CExample::CExample(const CExample& RightSides) 
{
	nSize=RightSides.nSize; //!!!!!!请注意这句话!!!!!!
	pBuffer=new char[nSize];
	memcpy(pBuffer,RightSides.pBuffer,nSize*sizeof(char));
}
之前笔试题目中有一个是让写一个CString类,类中有一个普通构造函数,一个拷贝构造函数,一个等号重载运算符函数。做完这个题目也没有多想,面试的时候面试官问道了我写的拷贝构造函数,怎么直接调用私有数据成员,我一愣,赶紧说我忘了写一个GetData接口来返回这个值,面试官也是不纠错就这么过去了。虽然最后面试通过了,哈哈。也是醉了。回归正题,引用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.

访问限制标号是针对类而不是针对一个类的不同对象,只要同属一个类就可以不用区分同一个类的不同对象。因为CExample(const CExample& RightSides) 是类的成员函数,所以有权限访问私有数据成员。如果是在main函数中直接RightSides.nSize,那肯定就会报错了,不能访问,因为这是在类外不能访问私有数据成员。一个类的成员函数可以访问这个类的私有数据成员,我们要理解这个对类的访问限制,而不是针对对象。


2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场