请问:一个类中需用到CPtrArray之类的成员变量,怎么使类的封装性好一点呢?

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

10 个解决方案

#1


要讲封装的话,当然是private或者protected的成员变量

你那种方法就是图个方便

#2


再复习一下OO吧.

#3


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

#4


肯定不能直接用,最懒也要通过函数来对其间接引用,提供最基本的封装,比如

CPtrArray& CMyClass::GetItems(void){
    return m_PtrArray;
}

调用
myClass.GetItems()->GetAt(i); 
//....

#5


TO:mynamelj(隐姓埋名,从此绝迹在互联网之上) 
CPtrArray作为一个容器类,你肯定是要实现某个功能,把这个功能封装成一个类,由这个功能类来维护这个CPtrArray数组.

CPtrArray中管理的是指向某个结构体的指针,我主要是对这个CPtrArray对象进行GetAt、SetAt、Add、RemoveAt、InsertAt、GetSize这些操作,来完成相应数据的读取,添加,更新操作

其实最主要的是我要在类中跟踪CPtrArray对象的“读”和“写”两种状态
原来想读的时候返回一个CPtrArray对象的常量指针或引用,这样虽然不能直接对CPtrArray对象进行InsertAt、RemoveAt等“写”操作,但通过GetAt获得相应的指针后,就能对所指向结构体的内容进行更改了!!!怎么办?
写到好说,封装两个函数完成插入和更新即可

还有,我不可能把所有CPtrArray类所实现的操作函数都在类中做一个“外包”函数吧,哪样这个类的接口也太。。。因为我这个类中很有几个这个类似的容器对象

#6


TO:SoLike(思危) 
肯定不能直接用,最懒也要通过函数来对其间接引用,提供最基本的封装


哪是以前的代码,大部份是别人写的,后来也只的将就用了。
现在软件要进行彻底的改版,我也认为哪样不好!所以才想好好封装一下,考虑了好久,也没好一点的思路,所以才请教各位

#7


应该进行封装
把CPtrArray暴露在外面,现在是方便了,但是升级维护就麻烦了

如果是多线程,怎么保障安全

至少:
AddXxx...通常是有序的插入
DelXxx...可能不能直接delete对象,应为可能还有引用者
GetXxx...返回对象的可用指针,如果成员较多,二分查找是应该提供的

这三个方法是应该提供的

#8


把CPtrArray封装一下, 比如提供
Add
Del
Get
Set
这样一系列函数

否则把CPtrArray直接暴露给外部使用, 相当于把类内部的实现细节(数据存储结构)暴露出去了, 将来一旦有需求要换用其他数据结构, 那就有得你改了

这样做, 以后只需要重新实现一个数据封装类, 外部就不需要改了

#9


重构一个别人的程序很麻烦啊,先把思路吃透,然后修改。 
工作量有时候很大,不必重写轻松多少。

#10


顶起!

#1


要讲封装的话,当然是private或者protected的成员变量

你那种方法就是图个方便

#2


再复习一下OO吧.

#3


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

#4


肯定不能直接用,最懒也要通过函数来对其间接引用,提供最基本的封装,比如

CPtrArray& CMyClass::GetItems(void){
    return m_PtrArray;
}

调用
myClass.GetItems()->GetAt(i); 
//....

#5


TO:mynamelj(隐姓埋名,从此绝迹在互联网之上) 
CPtrArray作为一个容器类,你肯定是要实现某个功能,把这个功能封装成一个类,由这个功能类来维护这个CPtrArray数组.

CPtrArray中管理的是指向某个结构体的指针,我主要是对这个CPtrArray对象进行GetAt、SetAt、Add、RemoveAt、InsertAt、GetSize这些操作,来完成相应数据的读取,添加,更新操作

其实最主要的是我要在类中跟踪CPtrArray对象的“读”和“写”两种状态
原来想读的时候返回一个CPtrArray对象的常量指针或引用,这样虽然不能直接对CPtrArray对象进行InsertAt、RemoveAt等“写”操作,但通过GetAt获得相应的指针后,就能对所指向结构体的内容进行更改了!!!怎么办?
写到好说,封装两个函数完成插入和更新即可

还有,我不可能把所有CPtrArray类所实现的操作函数都在类中做一个“外包”函数吧,哪样这个类的接口也太。。。因为我这个类中很有几个这个类似的容器对象

#6


TO:SoLike(思危) 
肯定不能直接用,最懒也要通过函数来对其间接引用,提供最基本的封装


哪是以前的代码,大部份是别人写的,后来也只的将就用了。
现在软件要进行彻底的改版,我也认为哪样不好!所以才想好好封装一下,考虑了好久,也没好一点的思路,所以才请教各位

#7


应该进行封装
把CPtrArray暴露在外面,现在是方便了,但是升级维护就麻烦了

如果是多线程,怎么保障安全

至少:
AddXxx...通常是有序的插入
DelXxx...可能不能直接delete对象,应为可能还有引用者
GetXxx...返回对象的可用指针,如果成员较多,二分查找是应该提供的

这三个方法是应该提供的

#8


把CPtrArray封装一下, 比如提供
Add
Del
Get
Set
这样一系列函数

否则把CPtrArray直接暴露给外部使用, 相当于把类内部的实现细节(数据存储结构)暴露出去了, 将来一旦有需求要换用其他数据结构, 那就有得你改了

这样做, 以后只需要重新实现一个数据封装类, 外部就不需要改了

#9


重构一个别人的程序很麻烦啊,先把思路吃透,然后修改。 
工作量有时候很大,不必重写轻松多少。

#10


顶起!