我试图了解现代 C++ 习语和最佳实践,我想问一下,在编写类时,是否曾经有过让函数成为成员函数而不是类中的自由函数的时候命名空间,此外,当您需要基于类的类型进行运行时分派时。
我在想也许是当您需要访问班级的私人成员时,但您也可以创建一个免费的朋友功能并获得相同的效果,但具有免费功能的好处,所以我不确定什么是最好的案子。
让非虚拟函数成为成员是否合理?
我试图了解现代 C++ 习语和最佳实践,我想问一下,在编写类时,是否曾经有过让函数成为成员函数而不是类中的自由函数的时候命名空间,此外,当您需要基于类的类型进行运行时分派时。
我在想也许是当您需要访问班级的私人成员时,但您也可以创建一个免费的朋友功能并获得相同的效果,但具有免费功能的好处,所以我不确定什么是最好的案子。
让非虚拟函数成为成员是否合理?
OOP 的主要原则之一是封装。你把一些逻辑上组合在一起的数据做成一个类。相同逻辑分组的扩展将是操作此数据的函数。这样的函数应该成为成员函数。让它们成为与类友好的自由函数违反了封装原则。
如果非虚函数对类中的数据进行操作,则将它们设为类的成员不仅是合理的,而且是典型的。
任何你可以用非虚拟成员函数做的事情,你也可以用一个免费的朋友函数做。区别在于您是否将函数称为obj.foo()
或foo(obj)
。在面向对象的程序中,前者是首选,后者仅用于(不常见的)有助于使代码更具可读性的情况。
这在“现代”C++ 中并没有改变。一直都是这样。