当/ if使非虚函数成为成员函数时

时间:2014-07-23 03:39:46

标签: c++ member-functions idiomatic non-member-functions

我试图了解现代C ++习语和最佳实践,并且我想问一下,在创作一个类时,是否曾经有一个时间应该使一个函数成为一个成员函数,而不是一个自由函数在类的命名空间中,除了需要基于类的类型的运行时调度。

我想也许当你需要访问该类的私人成员时,你也可以创建一个免费的朋友功能并获得相同的效果,但有免费功能的好处,所以我不确定是什么在这种情况下最好。

将非虚函数作为成员是否合理?

2 个答案:

答案 0 :(得分:1)

如果对类的非虚函数成员进行操作,那么它不仅是合理的,它是典型的

您可以使用非虚拟成员函数执行任何操作,也可以使用无朋友功能。不同之处在于您是将该功能称为obj.foo()还是foo(obj)。在面向对象的程序中,前者是首选,而后者仅用于(不常​​见)有助于使代码更具可读性的情况。

这并没有改变现代"现代" C ++。它总是这样。

答案 1 :(得分:1)

OOP的主要原则之一是封装。您将一些逻辑上的数据放在一起,然后从中创建一个类。相同逻辑分组的扩展将是操纵该数据的函数。这些功能应该成为会员功能。将它们作为自由函数,这些函数与这个类有关,这违背了封装原则。