尝试通过遍历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;
}
答案 0 :(得分:1)
是的,SortChild
公开继承自AbstractSort
:sort()
方法被覆盖并在您的示例中正确调用。
对于排序算法,你有一个小错字:
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;
}
一个小错误会带你走很长的路