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

原创 2016年07月13日 10:55:55
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,那肯定就会报错了,不能访问,因为这是在类外不能访问私有数据成员。一个类的成员函数可以访问这个类的私有数据成员,我们要理解这个对类的访问限制,而不是针对对象。


版权声明:本文为博主原创文章,如需转载请标明出处链接!否则追究法律责任! https://blog.csdn.net/peng314899581/article/details/51895998

拷贝构造函数的调用时机

拷贝构造函数的调用有四种场景 假设定义了一个类A: class A{ public: A(const A& obj) //拷贝构造函数 {} }; 第一种copy构造函数调用: void mai...
  • u010864559
  • u010864559
  • 2017-03-28 18:58:19
  • 328

调用拷贝构造函数的几种情况(附面试题)

1. 深拷贝和浅拷贝(拷贝构造函数的使用)   有时候需要自己定义拷贝构造函数,以避免浅拷贝问题。 在什么情况下需要用户自己定义拷贝构造函数: 一般情况下,当类中成员有指针变量、类中有动态内...
  • zzwdkxx
  • zzwdkxx
  • 2016-11-30 16:24:44
  • 3287

类一定要定义拷贝构造函数,特别是在类成员含有指针的情况(不论指针是何种类型),安全!!!

举例说明一个未定义拷贝构造函数,产生的非常诡异的现象 using namespace std; class people  { private: char *name; int age; ...
  • lujiandong1
  • lujiandong1
  • 2014-12-04 10:20:17
  • 1049

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

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

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

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

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

拷贝构造函数 访问私有变量成员 分类: C/C++ Primer/STL2013-06-04 13:49 1028人阅读 评论(0) 收藏 举报 laincopy cla...
  • wangyin159
  • wangyin159
  • 2015-07-13 08:51:56
  • 419

拷贝构造函数为何可以调用引用参数对象的私有成员?

拷贝构造函数为何可以调用引用参数对象的私有成员? 例如 String(const String &other) { m_data=other.x;//x是String类的私有成员 } 可以。 ...
  • jphaoren
  • jphaoren
  • 2010-07-28 11:06:00
  • 1035

C++拷贝构造函数详解

一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂...
  • lwbeyond
  • lwbeyond
  • 2011-02-23 13:39:00
  • 285516

c++类对象调用privated

类的成员变量分三种: public   protect  private   1、类的成员函数可以访问类这三类 2、继承类成员函数可以访问 protect  类型 3、只有本身...
  • as14569852
  • as14569852
  • 2017-04-12 11:28:40
  • 502
收藏助手
不良信息举报
您举报文章:拷贝构造函数可以访问私有数据成员
举报原因:
原因补充:

(最多只允许输入30个字)