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