当前位置:首页 > 编程笔记 > 正文
已解决

《Effective C++》条款23

来自网友在路上 185885提问 提问时间:2023-11-22 18:38:39阅读次数: 85

最佳答案 问答题库858位专家为你答疑解惑

宁以non-member、non-friend替换member函数

class A
{
public:void waya();void wayb();void wayc();void allways(){waya();wayb();wayc();}
};

想要调用类中多个函数,可以在写一个成员函数进行调用,还可以写成非成员函数的形式:

class A
{
public:void waya();void wayb();void wayc();
};
void allways(A a)
{a.waya();a.wayb();a.wayc();
}

哪种比较好?

答案是后者。

因为非成员函数比成员函数具有更高的封装性。我们从封装开始讨论,如果某些东西被封装,它就不再可见,愈多东西被封装,愈少人可以看到他,我们就有愈大的弹性去改变它,因为我们的改变仅仅直接影响到改变的那些人事物。我们推崇封装的原因:它使我们能够改变事物而只影响有限客户。

愈多函数访问它,它的封装性就愈低

但是这也不是最优的写法。

比较自然的做法是让allways()成为一个non-member函数并且位于A类所在的同一个namespace中。

不同的头文件存放不同的函数但都同属于一个命名空间。

这也正是C++标准程序库的组织方式,标准程序库不是拥有单一、整体、庞大的<C++StandardLibrary>头文件并在其中内含std命名空间内的每一样东西,而是有很多头文件(<vector>、<list> )等。每个头文件只需要声明std的某些机能,不需要#include<list>如果客户不想使用list。

让所有便利函数放在多个头文件内但隶属于同一命名空间是个不错的做法 

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"《Effective C++》条款23":http://eshow365.cn/6-41903-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!