包含类时,它们具有相同的名称功能(无重载)

时间:2016-11-09 21:04:05

标签: c++ function call header-files

我正在完成一项任务。赋值的目标是使用4种不同的排序算法并对它们进行比较,以确定何时哪种算法优于另一种算法。我决定将每个排序方法创建为自己的类,并将要排序的向量传递给类。

由于每个类都包含在内并且具有相同的参数(因此没有重载),如何指定我希望调用的排序函数?我试过做

  • insertionsort.sort(insertvec); //错误:insertionsort未声明

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

  • 排序(insertvec); //作品

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

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

更新:

好的,条款选择不好。我没有上课。我认为类是cpp和h文件,这是不准确的。我没有把排序算法写成类,只是作为写在cpp中但由头文件访问的函数,它们被包含并被调用。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

在编辑之前确定。我想出了这个方法,让他们在不同的课堂上。从评论到你的问题,你可以看到非常浪费,而不是最佳实践。

#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
}

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