我已经看到成员函数在它们所属的类内部和类外部都使用类内部的函数原型进行了编程。我只使用过第一种方法进行编程,但想知道使用另一种方法或只是个人喜好是否更好?
8 回答
假设你的意思是 C++,在类之外定义函数总是更好,因为如果你把它放在类中,编译器可能会尝试内联它,这并不总是可取的:
- 代码大小的增加(每个包含此标头的目标文件最终都可能在其代码中包含该函数的副本)。
- 函数定义更改时破坏二进制兼容性。
即使使用内联函数,通常最好将定义放在类之外以提高类公共接口的可读性,除非该函数是一个普通的访问器或其他一些单行器。
对于 C++,将方法定义放在头文件中意味着包含给定头文件的所有内容都必须在头文件更改时重新编译——即使它只是一个实现细节。
将定义移出头文件意味着仅当头文件本身发生更改(添加/删除函数或更改声明)时,才需要重新编译包含头文件的文件。这会对复杂项目的编译时间产生很大影响。
这两种技术都有优点。
如果您只在类定义中放置原型,那么使用您的类的人可以更轻松地查看可用的方法。他们不会因实施细节而分心。
将代码直接放在类定义中可以更简单地使用类,您只需#include 一个标题。这对于模板类特别有用(必要)。
假设语言是 C++:
底线是个人喜好。课堂内部整体更短,更直接,尤其是对于
int getFoo() const { return _foo; }
函数类型。在 te 类之外,可以从类定义中删除“混乱”。
我看到这两个都在使用...
当然,非内联函数总是在类之外。
在定义类时混合两种样式也很常见。对于由 1 或 2 行组成的简单方法,在类定义中定义方法体是常见且方便的。对于更冗长的方法,最好在外部定义它们。您将拥有更具可读性的类定义,而不会将它们与方法体混淆。
隐藏方法的实现是有益的,因为类的用户不会被实际实现分散注意力,或者对以后可能会改变的实现做出假设。
如果在类中实现函数,则不能在多个 .cpp 文件中 #include 类,否则链接器会抱怨函数的多个定义。
因此,通常的做法是将类定义放在 .h 文件中,将成员实现放在 .cpp 文件中(通常具有相同的名称)。
同样,假设 C++,我通常将其限制为虚拟函数的占位符,例如
virtual int MyFunc() {} // Does nothing in base class, override if needed
其他任何事情,而 Andrew Medico 的观点太容易出现并损害编译时间。