【问题标题】:When including classes and they have same name functions (no overloading)当包含类并且它们具有相同名称的函数时(无重载)
【发布时间】:2016-11-09 21:04:05
【问题描述】:

我正在执行一项任务。作业的目标是拥有 4 种不同的排序算法并比较它们以确定何时比另一种更好。我决定将每个排序方法创建为自己的类,并将要排序的向量传递给该类。

由于这些类中的每一个都将被包含并具有相同的参数(因此不会重载),我如何指定我希望调用的排序函数?我试过做

  • 插入排序.sort(insertvec); //错误:未声明插入排序

  • 插入排序::排序(insertvec); //错误:未声明插入排序

  • 排序(插入向量); //有效

  • 插入排序->排序(insertvec); //错误:未声明插入排序

所有类都使用命名空间 std,因为我看不出更改命名空间会有什么帮助。是的,我对命名空间的工作知识很薄弱。

更新:

好的,术语选择不当。我没有使用课程。我认为类是 cpp 和 h 文件,这是不准确的。我没有将排序算法写成类,只是写在 cpp 中但由头文件访问的函数,这些函数被包含并被调用。

那么我如何告诉编译器我想要merge.sort() 而不是insertion.sort()?

【问题讨论】:

  • 但是你可以再次使用函数。
  • 你为什么需要一个班级?
  • 听起来你应该使用namespace 而不是class
  • @RichardBarker,如果你提到虚函数和继承,那是不必要的开销。模板化解决方案将允许编译器进行更多优化。
  • 为什么不能只调用一个函数insertion_sort() 和另一个bubble_sort() 等等?

标签: c++ function call header-files


【解决方案1】:

由于您的类都使用相同的方法签名,您应该为该方法使用接口。然后您可以轻松地将排序对象(即您的具体类)与接口类型一起使用并调用方法。这就是接口存在的原因。

【讨论】:

    【解决方案2】:

    好的,在您进行编辑之前。我想出了这个方法,让他们都在不同的班级。从 cmets 到您的问题,您可以看到这是非常浪费的,而不是最佳实践。

    #include <vector>
    
    using namespace std;
    
    class InsertionSort1
    {
        public:
            void sort(vector<int> &theVector)
            {
                //sort implementation 1
            }
    };
    
    class InsertionSort2 
    {
        public:
            void sort(vector<int> &theVector)
            {
                //sort implementation 2
            }
    };
    
    class InsertionSort3
    {
        public:
            void sort(vector<int> &theVector)
            {
                //sort implementation 3
            }
    };
    
    class InsertionSort4
    {
        public:
            void sort(vector<int> &theVector)
            {
                //sort implementation 4
            }
    };
    
    int main()
    {
        vector<int> vector1 = {/*elements*/};
        vector<int> vector2 = {/*elements*/};
        vector<int> vector3 = {/*elements*/};
        vector<int> vector4 = {/*elements*/};
    
        InsertionSort1 algorithm1;
        InsertionSort2 algorithm2;
        InsertionSort3 algorithm3;
        InsertionSort4 algorithm4;
    
        algorithm1.sort(vector1);
        algorithm2.sort(vector2);
        algorithm3.sort(vector3);
        algorithm4.sort(vector4);
    
        //examine vectors to see differences
    }
    

    如果您可以将代码发布到您的问题中,也许我可以更新我的答案以更好地帮助您。

    【讨论】:

      最近更新 更多