继承与聚合

来源:互联网 发布:java培训机构哪家好 编辑:程序博客网 时间:2024/06/05 03:22

问:

定义了类A,以及A的一个子类B, B中的函数想要访问A中的数据成员,不知如何实现?望赐教。 具体问题说明如下:
Class B {
...
 int f();
...
}

Class A {
public:
 int array[64];

 B  b_u;
}

对象b_u中的函数f()需要访问A中的成员数据array,应该怎么访问?或者有什么方法可以实现上面的需求?

答:

首先楼主的概念上有个错误。在继承的关系上我们才可以叫做的子类,而楼主给的例子A和B没有继承的关系,仅仅是整体和部分的关系。UML中有个叫“复合”的,就是专指这种关系。

“复合”最典型的例子就是windows里面的界面了:一个窗口是由菜单、按钮等等多个类组合出来的。我们在构造菜单、按钮对象的时候必需知道窗口的位置,才能根据相对位置计算出自己的位置。这个问题似乎和楼主的问题非常相像:作为组件的类B需要访问类A的某些属性。
在C++BUILDER里面是这样解决的:在构造菜单、按钮的时候,构造函数需要参数(Object Parent)。object是C++BUILDER里组件的基类,窗口、菜单、按钮都是从object继承而来的。object应该包含了一个组件的位置等信息,所以当你构造菜单或是按钮的时候把窗口的指针强制转化为object类型传给构造函数。这个时候菜单或是按钮就可以根据Parent参数获得窗口的位置信息了。
当然,要获得对象A的信息,并不需要在构造对象B的时候就把类A的对象的指针传给对象B,只要在对象B需要访问对象A之前把A的指针传给B就可以了。

另外,我的习惯是在定义class A的时候一般的不直接构造B,仅仅是定义一下B的指针,在需要使用B的时候再构造B。象楼主那样定义class A在编程的时候并不常见。

原创粉丝点击