如果清楚 class A中成员变量的定义结构,存取其私有、保护 成员变量的值不困难:

- class A
- {
- ...........
- private:
- type m_x;
- };
- class B
- {
- ...........
- public:
- type m_x;
- };
class B的成员变量的定义结构与class A一样,只是把class A中的private 改成public
- A demoA;
- B *pB;
- .........
- pB = (B *) &demoA;
- pB->m_x = ...;
复制代码
这里的pB->m_x实际上是等效 demoA.m_x,只是C++接受前者而不接受后者。
-----------------
楼主Hellow提出的情况比较复杂,必须把baseClass 和classA映射到两个新的
class,这两个新的class中的成员变量的定义结构必须分别与baseClass 和classA
相同,而存取权限private / protected 改成public.
-----------------
C++中提供的private/protected的所谓数据保护,本人还没有看出对程序本身、
对程序员有什么益处,倒是看到不少坏处:ObjectARX class中的成员数据大量
用protected/private "保护",对这些数据的存取必须经过成员函数调用,
影响程序运行效率!
------------------
又:
类的成员函数定义一般不会影响类对象中的成员数据结构(偏移量),
不过本人发现,析构函数是否虚拟化( 前置 virtual ),会影响类对象
总的sizeof()值,可能与位对齐有关,具体影响情况,本人没有深
究,不知道哪里可以查阅到相关资料。
========================================
又:
对于protected:[/COLOR] 下的成员变量的存取有一个简单方法,以Hellow
给的例子为例:
- class baseClass
- {
- ...
- protected:
- type m_var;
- };
- class classA: public baseClass
- {
- ...};
- [COLOR=Blue]
- class classT : publc classA
- {
- public:
- type & as_Mvar() {
- return m_var;
- }
- };
- [/COLOR]
- class classB: public someotherbaseClass
- {
- ....
- [COLOR=Blue]
- void DemoFunc() {
- classA demoA;
- classT *pT= (classT *) &demoA;
- pT->as_Mvar() = ...; // 这里的pT->as_Mvar() 与m_var等效
- ............
- }
- [/COLOR]
- ....
- };
复制代码
注意:classT 中不得定义有任何成员变量!
[/COLOR] |