c++ - 构造函数为啥能访问参数的私有数据成员

【字号: 日期:2023-04-17浏览:18作者:雯心

问题描述

对于c++ private数据成员访问的问题: class MyClass{public: MyClass(const char* str = NULL) {if(str == NULL){ m_data = new char[1]; *m_data = ’0’;}else{ int len = strlen(str); m_data = new char[len + 1]; strcpy(m_data,str);} } MyClass(const MyClass &other) {printf('%sn' , other.m_data ); } ~MyClass(void) {delete [] m_data; }private: char *m_data;};MyClass* tmp = new MyClass('a');MyClass tmp1 = *tmp; // a

上述代码的拷贝构造函数可以访问到参数的private数据成员,这个怎么理解?

后续又添加了个测试函数,发现还是可以访问

class MyClass1{public: MyClass1(const char* str = NULL); MyClass1(const MyClass1 &other); ~MyClass1(void); void TestPri(const MyClass1 &other);private: char *m_data;};MyClass1::MyClass1(const char* str){ if(str == NULL) {m_data = new char[1];*m_data = ’0’; } else {int len = strlen(str);m_data = new char[len + 1];strcpy(m_data,str); }}MyClass1::MyClass1(const MyClass1 &other){ printf('%sn' , other.m_data );}MyClass1::~MyClass1(void){ delete [] m_data;}void MyClass1::TestPri(const MyClass1 &other){ printf('%sn' , other.m_data );}MyClass1* tmp = new MyClass1('a');MyClass1 tmp1 = *tmp; // aMyClass1 tmp2;tmp2.TestPri(*tmp); // a

求解答

问题解答

回答1:

访问控制权限是以类为单位的,而不是对象。正是这个原因,成员函数可以访问该类对象的私有成员变量,但是不可以访问其它类的对象的私有成员。这里有个相似的问题:http://stackoverflow.com/ques...

相关文章: