关闭

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

标签: C++class拷贝构造私有数据成员访问控制
698人阅读 评论(0) 收藏 举报
分类:
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,那肯定就会报错了,不能访问,因为这是在类外不能访问私有数据成员。一个类的成员函数可以访问这个类的私有数据成员,我们要理解这个对类的访问限制,而不是针对对象。


0
0

猜你在找
深度学习基础与TensorFlow实践
【在线峰会】前端开发重点难点技术剖析与创新实践
【在线峰会】一天掌握物联网全栈开发之道
【在线峰会】如何高质高效的进行Android技术开发
机器学习40天精英计划
Python数据挖掘与分析速成班
微信小程序开发实战
JFinal极速开发企业实战
备战2017软考 系统集成项目管理工程师 学习套餐
Python大型网络爬虫项目开发实战(全套)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16013次
    • 积分:533
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:0篇
    • 译文:0篇
    • 评论:21条
    联系方式

    公司:深信服科技股份有限公司


    所在地:中国-广东省-深圳市


    QQ交流群:165650716


    文章分类
    最新评论