我编写了一个程序,它接受整数的输入vector
并打印这些整数的所有可能排列。
为了做到这一点,我的程序有两种方法: void Permutate(//input)
和void DoPermute(//necessary arguments)
只有方法Permutate
应由用户/客户端调用。 DoPermutate
是一种递归方法,首先由Permutate
调用,并为算法提供逻辑。现在的问题是:你会把Permutate
和DoPermutate
放在一个class
中并DoPermutate
private
,还是你会把这两种方法放在全局范围内,根本不使用classes
,从而向用户/客户端公开DoPermutate
?我问这个是因为cmath
全局范围内也有实用程序方法。什么是更优雅的方法?
现在的问题是:你会把
Permutate
和DoPermutate
放在一个班级里吗?
这就是我要的:
-
在
namespace
中声明Permutate
,例如:namespace MyApp { // Declare void Permutate( ... ); // Add all the necessary arguments, // which can be input arguments ad // output arguments. }
请注意,声明不会公开在实现中是否使用类。这是不需要在接口中公开的实现细节。
-
如果在实现中使用类有帮助,请使用它。
namespace MyApp { // Helper class struct PermutateClass { ... }; // Implement the user facing function. void Permutate ( ... ) { // Delegate the implementation to the helper class. PermuateClass p(...); p.doIt(); } }
-
如果使用类没有帮助,只需根据需要使用帮助程序函数。
namespace MyApp { // Helper function void DoPermutate ( ... ) { ... } // Implement the user facing function. void Permutate ( ... ) { // Delegate the implementation to the helper function. DoPermutate p(...); } }
我想强调的关键点是,是使用具有一堆成员函数的帮助程序类还是使用一堆非成员函数,这是一个实现细节,您应该能够在不影响面向用户的函数的用户的情况下进行选择。