“呵呵,你说得没错,访问权限是应该对class控制还是应该对object控制 在各个语言里不尽相同,但C++选择了class。 既然这样,那么“CMyString a_cOther的变量m_pcData明明是私有的”说得就不对了,应该理解为m_pcData对非CMyString(继承这里先不谈)而言是私有的,而不能理解为m_pcData对非a_cOther而言是私有的。” 周星星(http://blog.vckbase.com/bruceteen)在给我的上一篇疑问中作了这样的解答。
按照他的意思,应该是对于相同类的不同对象ObjA和ObjB,他们应该是可以互相访问对方的私有变量的。 我做了这样的尝试。 新建一个类 class CTest { public: void SetValue(int a_iValue); int GetValue(); void SetValue(CTest a_cTest); CTest(int a_iValue = 0); virtual ~CTest();
private: int m_iTest; };
各个函数的实现如下: CTest::CTest(int a_iValue) { m_iTest = a_iValue; }
CTest::~CTest() { }
void CTest::SetValue(CTest &a_cTest) { m_iTest = a_cTest.m_iTest; a_cTest.m_iTest = -1; }
int CTest::GetValue() { return m_iTest; }
void CTest::SetValue(int a_iValue) { m_iTest = a_iValue; }
如果他说话是对的话,那么下面一段程序 int iTmp = 1; CTest clsTest1(iTmp); CTest clsTest2; clsTest2.SetValue(clsTest1); 不仅可以运行,而且最后的结果应该是 clsTest1.m_iTest == -1; clsTest2.m_iTest == 2;
运行结果果真如此。
周星星(http://blog.vckbase.com/bruceteen)的话是对的:访问权限是应该对class控制还是应该对object控制 在各个语言里不尽相同,但C++选择了class。 看来我对很多东西还是不懂,呵呵,长路漫漫,吾将上下求索…… 
|