我喜欢DRY的概念(不要重复自己[oops]),但C ++的头文件概念违背了这种编程规则。完全在头文件中定义一个类成员有什么缺点吗?如果对模板做的是正确的,为什么不对正常的类?我有一些缺点和好处的想法,但你的是什么?
答案 0 :(得分:23)
将所有内容放在头文件中的可能优点:
将所有内容放入头文件中可能存在的缺点:
答案 1 :(得分:17)
嗯 - 一个问题是,通常实现的更改比类定义更频繁 - 因此对于大型项目,您最终必须为每个小的更改重新编译世界。
答案 2 :(得分:6)
不在头文件中实现类的主要原因是:您的类的使用者是否需要知道其实现细节?答案几乎总是没有。他们只想知道他们可以用什么界面与班级互动。让标题实现在标题中可见会使得理解这个界面变得更加困难。
除了考虑紧凑性和将界面与实现分离之外,还存在商业动机。如果你开发一个库来销售,你(可能)不想泄露你所销售的图书馆的实施细节。
答案 3 :(得分:6)
你不是在重复自己。您只能在一个标头中编写一次代码。它由预处理器重复,但这不是你的问题,并且它不会违反DRY。
如果对模板做的是正确的,为什么不对正常的类
对于模板来说,这不是正确的事情。它只是唯一一个真正起作用的。
无论如何,如果在标题中实现一个类,您将获得以下优点和缺点:
而且......就是这样,真的。
我的大多数代码都在标题中,但这是因为我的大部分代码都是模板。
答案 4 :(得分:2)
主要缺点(除了冗长的构建)是没有明确的界面和实现分离。
理想情况下,您不需要看到直观且记录良好的界面的实现。
答案 5 :(得分:0)
还没有提到:为每个include实例化虚函数,所以你可以膨胀你的可执行文件(我不确定这是否适用于所有编译器)。
还有另一种选择:
在源文件中声明的类中做了很多东西。一个例子是pimpl-idiom,但是也有人害怕从头文件中声明类。但是,这对私人课程来说很有意义。