c – 通过公共const指针封装是个好主意吗?

c – 通过公共const指针封装是个好主意吗?,第1张

概述所以这就是我所知道的: >明智的做法是不要直接在您的API中暴露您的ivars;相反,使用访问器 >指向非const对象的const指针只是意味着您可以更改对象,但不能重定向指针指向的位置 这是我的情况: 我有一些相关的课程.我想创建一个简单的类,通过组合,将它们组合成一个逻辑接口.我的每个封闭类在其API中都有公共和私有区别,因此我不介意将它们直接暴露给我父类的用户.这意味着我为这些ivars编 所以这就是我所知道的:

>明智的做法是不要直接在您的API中暴露您的ivars;相反,使用访问器
>指向非const对象的const指针只是意味着您可以更改对象,但不能重定向指针指向的位置

这是我的情况:

我有一些相关的课程.我想创建一个简单的类,通过组合,将它们组合成一个逻辑接口.我的每个封闭类在其API中都有公共和私有区别,因此我不介意将它们直接暴露给我父类的用户.这意味着我为这些ivars编写访问器对我来说太过分了,因为类已经管理了什么是公共的,什么不是.但是,我不希望用户更改包含在此组合父类中的实际对象.

所以我能想到的唯一方法就是使用这些对象的const指针,如下:

class Parent{  public:   EnclosedClass1*const ec1; //users can enjoy the public API of EnclosedClass   EnclosedClass2*const ec2;   voID convenIEnceMethod(){         //performs inter-related functions on both ec1 and ec2    } }

这样,让某人直接与ec1和ec2的API接口是没有害处的,但是,我想确保这是相当万无一失的,因为至少那个人不能改变被 *** 纵的实际资源,因此是const指针.

这是否有意义,是否很好地使用了const指针?

或者,我可以将它们完全保密,忘记指针(无论如何这个类管理这些对象),并且只需要为这些对象中包含的公共函数编写访问器.但这似乎有点矫枉过正了吧?

解决方法 传统的OOP方式是保持数据私有,如果想要在类之外使用它们,则拥有公共访问器.

如果您不希望修改私有数据指针,那么您不提供setter,只提供getter.

class Parent{  private:       EnclosedClass1*const ec1;       EnclosedClass2*const ec2;  public:      EnclosedClass1* getEnclosedClass1() const {...};      EnclosedClass2* getEnclosedClass2() const {...};          voID convenIEnceMethod(){    }

}

另一种可能性(如@pmr在下面的评论中提出的)是:

const EnclosedClass1& getEnclosedClass1() const {...};const EnclosedClass2& getEnclosedClass2() const {...};

使用const引用可以保护用户不会测试getter返回的值.但是你必须确保你的对象状态是一致的,并且永远不会有指向nullptr的内部指针;在这种情况下,你应该抛出异常.

总结

以上是内存溢出为你收集整理的c – 通过公共const指针封装是个好主意吗?全部内容,希望文章能够帮你解决c – 通过公共const指针封装是个好主意吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1257055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存