我试图了解现代C ++习语和最佳实践,并且我想问一下,在创作一个类时,是否曾经有一个时间应该使一个函数成为一个成员函数,而不是一个自由函数在类的命名空间中,除了需要基于类的类型的运行时调度。
我想也许当你需要访问该类的私人成员时,你也可以创建一个免费的朋友功能并获得相同的效果,但有免费功能的好处,所以我不确定是什么在这种情况下最好。
将非虚函数作为成员是否合理?
答案 0 :(得分:1)
如果对类的非虚函数成员进行操作,那么它不仅是合理的,它是典型的
。您可以使用非虚拟成员函数执行任何操作,也可以使用无朋友功能。不同之处在于您是将该功能称为obj.foo()
还是foo(obj)
。在面向对象的程序中,前者是首选,而后者仅用于(不常见)有助于使代码更具可读性的情况。
这并没有改变现代"现代" C ++。它总是这样。
答案 1 :(得分:1)
OOP的主要原则之一是封装。您将一些逻辑上的数据放在一起,然后从中创建一个类。相同逻辑分组的扩展将是操纵该数据的函数。这些功能应该成为会员功能。将它们作为自由函数,这些函数与这个类有关,这违背了封装原则。