C++重载函数

编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度型和双精度型.用重载函数实现。

最好有说明。

//用同名重载函数实现, 三种数据类型数组的排序
//VC2005 下编译测试通过

#include<iostream>

void Sort( int a[], int len )
{
int k,t;
for ( int i=0; i < len-1; i++ )
{
k=i;
for ( int j=i+1; j < len; j++ )
{
if ( a[k] > a[j] )
{
k=j;
}
}
if ( k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}

void Sort( double a[], int len )
{
double t;
int k;
for ( int i=0; i < len-1; i++ )
{
k=i;
for ( int j=i+1; j < len; j++ )
{
if ( a[k] > a[j] )
{
k=j;
}
}
if ( k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}
void Sort( float a[], int len )
{
float t;
int k;
for ( int i=0; i < len-1; i++ )
{
k=i;
for ( int j=i+1; j < len; j++ )
{
if ( a[k]>a[j] )
{
k=j;
}
}
if ( k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}

int main()
{
int a[10]= { 100, 98, 6, 12, 21, 20, 78, 65, 78, 54 };
float f[10]={ 76.4, 32.4, 56.4, 90, 12, 1, 2, 34, 45.4, 23.1 };
double d[10]={ 23.4, 1, 2, 22, 21.2, 34.5, 5, 6, 2.1, 1.1};

Sort( a, 10);
Sort( f, 10);
Sort( d, 10);

//输出排序后的数组...
for ( int i=0; i<10; i++ )
{
std::cout<< a[i]<<" ";
}
std::cout<< "\n";
for ( int i=0; i < 10; i++ )
{
std::cout<< f[i] << " ";
}
std::cout<<std::endl;
for ( int i=0; i < 10; i++ )
{
std::cout<< d[i] << " ";
}

return 0;
}

//PS: 楼上说得不错,如果想简便当然是模板实现比较方便, 但LZ要求用函数重
//载实现, 呵呵,所以楼上的虽然排序结果正确,却不符合楼主的题意!呵呵
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-27
重载函数就是函数名相同但是参数类型和个数或者顺序不同。
#include
<iostream>
using
namespace
std;
class
AAA
{
public:
void
print(int
a)
{
cout
<<
a;
}
void
print(int
a,int
b)
{
int
i=1;
cout
<<
a+b*i;
}
};
void
main()
{
AAA
a;
a.print(2);
a.print(2,5);
system("pause");
}
像上面这样当掉用print(2)或print(2,5)时就会根据传入参数的不同调用对应的函数。
第2个回答  2009-03-13
#ifndef ARRAY_BASED_SORTING_FUNCTIONS
#define ARRAY_BASED_SORTING_FUNCTIONS

//用直接插入排序法对数组A中的元素进行升序排列
template <class T>
void InsertionSort(T A[], int n)
{
int i, j;
T temp;

// 将下标为1~n-1的元素逐个插入到已排序序列中适当的位置
for (i = 1; i < n; i++)
{
//从A[i-1]开始向A[0]方向扫描各元素,寻找适当位置插入A[i]
j = i;
temp = A[i];
while (j > 0 && temp < A[j-1])
{ //逐个比较,直到temp>=A[j-1]时,j便是应插入的位置。
//若达到j==0,则0是应插入的位置。

A[j] = A[j-1]; //将元素逐个后移,以便找到插入位置时可立即插入。
j--;
}
// 插入位置已找到,立即插入。
A[j] = temp;
}
}
#endif

#ifndef ARRAY_BASED_SORTING_FUNCTIONS
#define ARRAY_BASED_SORTING_FUNCTIONS

// 辅助函数:交换x和y的值
template <class T>
void Swap (T &x, T &y)
{
T temp;

temp = x;
x = y;
y = temp;
}

// 用选择法对数组A的n个元素进行排序
template <class T>
void SelectionSort(T A[], int n)
{
int smallIndex; //每以趟中选出的最小元素之下标
int i, j;

for (i = 0; i < n-1; i++)
{
smallIndex = i; //最小元素之下标初值设为i
for (j = i+1; j < n; j++) //在元素A[i+1]..A[n-1]中逐个比较显出最小值
if (A[j] < A[smallIndex]) //smallIndex始终记录当前找到的最小值的下标
smallIndex = j;
Swap(A[i], A[smallIndex]); // 将这一趟找到的最小元素与A[i]交换
}
}
#endif
第3个回答  推荐于2016-11-10
C++重载函数

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。
第4个回答  2009-03-13
#include<iostream>
#include<stdlib.h>
using namespace std;
void sort(int *);
void sort(float *);
void sort(double *);
int n;
int main()
{int i;
cout<<"输入n:"<<endl;
cin>>n;
int *p= (int *)malloc(n*sizeof(int));
float *q= (float *)malloc(n*sizeof(float));
double *r=(double *)malloc(n*sizeof(double));
cout<<"输入int类n个元素:"<<endl;
for(i=0;i<n;i++)
cin>>p[i];
cout<<"输入float类n个元素:"<<endl;
for(i=0;i<n;i++)
cin>>q[i];
cout<<"输入double类n个元素:"<<endl;
for(i=0;i<n;i++)
cin>>r[i];
sort(p);
sort(q);
sort(r);
delete []p;
delete []q;
delete []r;
return 0;
}
void sort(int *cp)
{
int i,j;
int temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(cp[j]>cp[j+1])
{temp=cp[j];
cp[j]=cp[j+1];
cp[j+1]=temp;}
}
for(i=0;i<n;i++)
cout<<cp[i]<<" ";
cout<<endl;
}
void sort(float *cp)
{
int i,j;
float temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(cp[j]>cp[j+1])
{temp=cp[j];
cp[j]=cp[j+1];
cp[j+1]=temp;}
}
for(i=0;i<n;i++)
cout<<cp[i]<<" ";
cout<<endl;
}
void sort(double *cp)
{
int i,j;
double temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(cp[j]>cp[j+1])
{temp=cp[j];
cp[j]=cp[j+1];
cp[j+1]=temp;}
}
for(i=0;i<n;i++)
cout<<cp[i]<<" ";
cout<<endl;
}
相似回答