以前代码中采用的方法是:把CPtrArray之类的成员变量定义成公有成员,在外界直接操作该指针数组。
请问你们在设计这种类时,一般是怎么做的,怎么使类的封装性好一点呢?

解决方案 »

  1.   

    要讲封装的话,当然是private或者protected的成员变量你那种方法就是图个方便
      

  2.   

    CPtrArray作为一个容器类,你肯定是要实现某个功能,把这个功能封装成一个类,由这个功能类来维护这个CPtrArray数组.
      

  3.   

    肯定不能直接用,最懒也要通过函数来对其间接引用,提供最基本的封装,比如CPtrArray& CMyClass::GetItems(void){
        return m_PtrArray;
    }调用
    myClass.GetItems()->GetAt(i); 
    //....
      

  4.   

    TO:mynamelj(隐姓埋名,从此绝迹在互联网之上) 
    CPtrArray作为一个容器类,你肯定是要实现某个功能,把这个功能封装成一个类,由这个功能类来维护这个CPtrArray数组.CPtrArray中管理的是指向某个结构体的指针,我主要是对这个CPtrArray对象进行GetAt、SetAt、Add、RemoveAt、InsertAt、GetSize这些操作,来完成相应数据的读取,添加,更新操作其实最主要的是我要在类中跟踪CPtrArray对象的“读”和“写”两种状态
    原来想读的时候返回一个CPtrArray对象的常量指针或引用,这样虽然不能直接对CPtrArray对象进行InsertAt、RemoveAt等“写”操作,但通过GetAt获得相应的指针后,就能对所指向结构体的内容进行更改了!!!怎么办?
    写到好说,封装两个函数完成插入和更新即可还有,我不可能把所有CPtrArray类所实现的操作函数都在类中做一个“外包”函数吧,哪样这个类的接口也太因为我这个类中很有几个这个类似的容器对象
      

  5.   

    TO:SoLike(思危) 
    肯定不能直接用,最懒也要通过函数来对其间接引用,提供最基本的封装
    哪是以前的代码,大部份是别人写的,后来也只的将就用了。
    现在软件要进行彻底的改版,我也认为哪样不好!所以才想好好封装一下,考虑了好久,也没好一点的思路,所以才请教各位
      

  6.   

    应该进行封装
    把CPtrArray暴露在外面,现在是方便了,但是升级维护就麻烦了如果是多线程,怎么保障安全至少:
    AddXxx...通常是有序的插入
    DelXxx...可能不能直接delete对象,应为可能还有引用者
    GetXxx...返回对象的可用指针,如果成员较多,二分查找是应该提供的这三个方法是应该提供的
      

  7.   

    把CPtrArray封装一下, 比如提供
    Add
    Del
    Get
    Set
    这样一系列函数否则把CPtrArray直接暴露给外部使用, 相当于把类内部的实现细节(数据存储结构)暴露出去了, 将来一旦有需求要换用其他数据结构, 那就有得你改了这样做, 以后只需要重新实现一个数据封装类, 外部就不需要改了