c++ - 封装和指向对象的指针

标签 c++ pointers encapsulation

class CommandSchedule
    {
    private : 
       List<SubSchedule*> mSubScheduleList;
    public  :  
       void addSubSchedule (int id) 
       {  
          mSubScheduleList.add(new SubSchedule(id));
       }
       SubSchedule* addSubSchedule (int id) 
       {
          SubSchedule* item = new SubSchedule(id);

          mSubScheduleList.add(item);

          return item;
       }
    };

在这个类中,我定义了 2 个 addSubSchedule 函数,一个返回 void,一个返回指向对象的指针。

所以,我的问题是,如果返回对象指针的函数破坏了 CommandSchedule 类的封装?我对封装问题感到不安,因此非常感谢您的帮助。

最佳答案

为什么会破坏封装?您的对象的内部表示仍然是隐藏的:

private : 
   List<SubSchedule*> mSubScheduleList;

除非SubSchedule也被认为是内部表示,这里没有问题。

在一个封装良好的类中,只有它的成员函数可以操作它的内部细节。在这种情况下,一个 List 的事实使用似乎是一个细节,因为公共(public)接口(interface)的用户关心的只是该类允许他添加子计划。如何存储这些子计划是一个内部细节。您稍后可以更改此详细信息(例如,将它们存储在 SortedList 中)而不影响公共(public)界面的用户。所以,制作List<...>变量 private 促进了良好的封装。

如果界面的用户希望能够操作SubSchedule直接对象,那么暴露它就没有问题。但如果没有理由这样做,那么使用 SubSchedule s 可能也是一个内部细节,因此不应在公共(public)界面中公开。

关于c++ - 封装和指向对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8932923/

相关文章:

c++ - 返回引用实例和非引用实例之间有什么区别(return mystr & vs mystr)?

python - freeopcua c++客户端和python opcua的组合在getChild()上引发错误

python - Opencv Python 代码到 C++

c++ - 构造函数完成运行时指针变为空

c - 如何打印 calloc 指针中存储的值 (c)

java - 尝试封装时获取 "Null Object Reference"

c++ - atoi() 方法,char * cout

c++ - 通过 QI 或继承实现 IUnknown 相等的区别

c++ - 如何直接访问类的私有(private)成员?

java - 为什么 Java 将包访问设置为默认?