关闭

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

标签: C++class拷贝构造私有数据成员访问控制
1496人阅读 评论(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网站的观点或立场

拷贝构造函数和赋值构造函数声明为私有的作用

转载:http://blog.csdn.net/rabbit729/article/details/4000500 每个类只有一个赋值函数.   由于并非所有的对象都会使用拷贝构造函数...
  • hit_shaoqi
  • hit_shaoqi
  • 2016-11-27 11:55
  • 992

带指针成员的类的构造函数,拷贝函数,赋值函数总结

1. 类的代码#pragma warning(disable:4996) #include #include using namespace std; class StrBlobPtr { publi...
  • southernriver
  • southernriver
  • 2015-08-23 23:39
  • 1996

拷贝构造函数 访问私有变量成员

laincopy class CExample   {   public:       CExample(){pBuffer=NULL; nSize=0;} ...
  • Beyond_cn
  • Beyond_cn
  • 2013-06-04 13:49
  • 3020

C++基础之编写String类(拷贝构造函数)

拷贝构造函数的本质:一种函数,特殊的构造函数 拷贝构造函数的写法:和
  • PanPen120
  • PanPen120
  • 2014-08-15 15:07
  • 3132

拷贝构造函数 访问私有变量成员

laincopy class CExample   {   public:       CExample(){pBuffer=NULL; nSize=0;} ...
  • Beyond_cn
  • Beyond_cn
  • 2013-06-04 13:49
  • 3020

拷贝构造函数的一个对象访问私有成员的问题

最近遇到这样一个面试题:面试题 CString函数拷贝控制成员的编写 过程中遇到一个问题,真是当时让我疑惑不解:查查资料,原来是一时糊涂,看看人家的解答:不错,遂转一下(很简单,就是当时没转过弯来)...
  • ndzjx
  • ndzjx
  • 2016-05-29 19:42
  • 202

C++之对象数组+对象成员+拷贝构造函数(深/浅)

对象数组实例(栈中实例化和堆中实例化):class Coordinate { public: int m_iX; int m_iY; };int main() { Coordi...
  • u013486414
  • u013486414
  • 2017-03-03 15:47
  • 1163

拷贝构造函数和const成员函数

使用非const成员函数,引起的拷贝构造函数报错 class CStudent { /// 常量定义 public: enum {NAME_SIZE_MAX = 64}; ...
  • LostSpeed
  • LostSpeed
  • 2015-12-14 11:14
  • 755

smartptr应用及拷贝构造函数使用 源码

  • 2010-11-10 16:05
  • 6KB
  • 下载

C++中拷贝构造函数的使用

  • 2012-07-29 08:56
  • 275KB
  • 下载