具有选择排序算法的虚方法函数

时间:2014-06-11 03:49:34

标签: c++ algorithm sorting polymorphism virtual-method

尝试通过遍历select sort算法一次做两件事,但更重要的是学习多态/虚方法函数/覆盖c ++。我已经在C#中完成了它,但从未在c ++中完成。

我需要使用SortChild方法排序对此数组进行排序,它会覆盖(我认为?)排序的Base类方法。但由于某种原因,我不能让SortChild排序方法执行。

并且说实话,我不确定我是否正确编写了选择排序算法。随意给我任何暗示。谢谢!

#include "stdafx.h" 
#include <iostream>
using namespace std; 
class AbstractSort
{
public:
    //virtual void compare(int arr[], int count);
    virtual void sort(int arr[], int size)
    {
    };
};

class SortChild : public AbstractSort
{
public:
    void sort(int arr[], int size)
    {
        int temp, min;
        for (int i = 0; i < size - 1; i++)
        {
            min = i;
            for (int j = i + 1; j < size; j++)
            {
                if (arr[i] < arr[min])
                {
                    min = j;
                }
            }
            if (min != i)
            {
                temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
        for (int x = 0; x < size; x++)
        {
            cout << arr[x] << " ";
        }
    }
};
 int main()          
{
     int myArray[3] = {5, 1, 9};
     SortChild sr;
     AbstractSort * abs = &sr;
     sr.sort(myArray, 3);


    // This prevents the Console Window from closing during debug mode
    cin.ignore(cin.rdbuf()->in_avail());
    cout << "\nPress only the 'Enter' key to exit program: ";
    cin.get();

    return 0;
}

3 个答案:

答案 0 :(得分:1)

是的,SortChild公开继承自AbstractSortsort()方法被覆盖并在您的示例中正确调用。

对于排序算法,你有一个小错字:

if (arr[i] < arr[min])
       ^
   // This should be j (the index of the inner loop)

您的工作代码here的实例。

<强>输出:

  

调用派生方法

     

1 2 4 5 6 8 9

答案 1 :(得分:1)

您的虚拟方法似乎很好。排序代码中存在错误。通过一些额外的&#39; cout&#39;来查看固定代码。以下

#include <iostream>
using namespace std;
class AbstractSort
{
public:
    //virtual void compare(int arr[], int count);
    virtual void sort(int arr[], int size)
    {
        cout << "super" << endl;
    };
};

class SortChild : public AbstractSort
{
public:
    void sort(int arr[], int size)
    {
        cout << "child" << endl;
        int temp, min;
        for (int i = 0; i < size - 1; i++)
        {
            min = i;
            for (int j = i + 1; j < size; j++)
            {
                if (arr[j] < arr[min])
                {
                    min = j;
                }
            }
            if (min != i)
            {
                temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
        for (int x = 0; x < size; x++)
        {
            cout << arr[x] << " ";
        }
    }
};
 int main()
{
     int myArray[3] = {5, 1, 9};
     SortChild sr;
     //AbstractSort * abs = &sr;
     sr.sort(myArray, 3);


    // This prevents the Console Window from closing during debug mode
    cin.ignore(cin.rdbuf()->in_avail());
    cout << "\nPress only the 'Enter' key to exit program: ";
    cin.get();

    return 0;
}

答案 2 :(得分:1)

if (arr[j] < arr[min])
{
    min = j;
}

一个小错误会带你走很长的路