C++函数重载函数
用同一函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型。用重载函数实现,哪位大虾能给个完整的正确程序啊,小弟先谢了!(n个数据是我自己输入的啊)用...
用同一函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型。用重载函数实现,哪位大虾能给个完整的正确程序啊,小弟先谢了!(n个数据是我自己输入的啊)
用函数模板我也会啊,只是这题让用重载函数实现啊! 展开
用函数模板我也会啊,只是这题让用重载函数实现啊! 展开
4个回答
展开全部
用模板做确实代码更精简,这是详细的程序都给你写出来了,费了很长时间,楼主给力啊!呵呵
#include "iostream"
#include "stdio.h"
using namespace std;
#define M 10//定义要排序的数组个数,根据需要修改
//三个重载函数声明
void menu();
void sort(int a[M]);//整数排序
void sort(float a[M]);//单精度数排序
void sort(double a[M]);//双精度数排序
//主函数
int main()
{
int i,s;
int d1[M];float d2[M];double d3[M];
while(1)
{ menu();
cin>>s;
switch(s){
case 1:
cout<<"请依次输入整数:"<<endl;
for(i=0;i<M;i++) cin>>d1[i];
sort(d1);
cout<<"排序后结果为:"<<endl;
for(i=0;i<M;i++) cout<<d1[i]<<" ";
break;
case 2:
cout<<"请依次输入单精度数:"<<endl;
for(i=0;i<M;i++) cin>>d2[i];
sort(d2);
cout<<"排序后结果为:"<<endl;
for(i=0;i<M;i++) cout<<d2[i]<<" ";
break;
case 3:
cout<<"请依次输入双精度数:"<<endl;
for(i=0;i<M;i++) cin>>d3[i];
sort(d3);
cout<<"排序后结果为:"<<endl;
for(i=0;i<M;i++) cout<<d3[i]<<" ";
break;
case 4: exit(0);
default : exit(0);
}
}
return 0;
}
void menu()
{
cout<<" 请选择一种操作"<<endl;
cout<<"******************************************"<<endl;
cout<<"** **"<<endl;
cout<<"**1 整型排序 **"<<endl;
cout<<"**2 单精度排序 **"<<endl;
cout<<"**3 双精度排序 **"<<endl;
cout<<"**4 退出 **"<<endl;
cout<<"******************************************"<<endl;
}
void sort(int a[M])
{
int i,j;int t;
for(i=0;i<M-1;i++)
for(j=i+1;j<M;j++)
if(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
}
void sort(float a[M])
{
int i,j;float t;
for(i=0;i<M-1;i++)
for(j=i+1;j<M;j++)
if(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
}
void sort(double a[M])
{
int i,j;double t;
for(i=0;i<M-1;i++)
for(j=i+1;j<M;j++)
if(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
}
#include "iostream"
#include "stdio.h"
using namespace std;
#define M 10//定义要排序的数组个数,根据需要修改
//三个重载函数声明
void menu();
void sort(int a[M]);//整数排序
void sort(float a[M]);//单精度数排序
void sort(double a[M]);//双精度数排序
//主函数
int main()
{
int i,s;
int d1[M];float d2[M];double d3[M];
while(1)
{ menu();
cin>>s;
switch(s){
case 1:
cout<<"请依次输入整数:"<<endl;
for(i=0;i<M;i++) cin>>d1[i];
sort(d1);
cout<<"排序后结果为:"<<endl;
for(i=0;i<M;i++) cout<<d1[i]<<" ";
break;
case 2:
cout<<"请依次输入单精度数:"<<endl;
for(i=0;i<M;i++) cin>>d2[i];
sort(d2);
cout<<"排序后结果为:"<<endl;
for(i=0;i<M;i++) cout<<d2[i]<<" ";
break;
case 3:
cout<<"请依次输入双精度数:"<<endl;
for(i=0;i<M;i++) cin>>d3[i];
sort(d3);
cout<<"排序后结果为:"<<endl;
for(i=0;i<M;i++) cout<<d3[i]<<" ";
break;
case 4: exit(0);
default : exit(0);
}
}
return 0;
}
void menu()
{
cout<<" 请选择一种操作"<<endl;
cout<<"******************************************"<<endl;
cout<<"** **"<<endl;
cout<<"**1 整型排序 **"<<endl;
cout<<"**2 单精度排序 **"<<endl;
cout<<"**3 双精度排序 **"<<endl;
cout<<"**4 退出 **"<<endl;
cout<<"******************************************"<<endl;
}
void sort(int a[M])
{
int i,j;int t;
for(i=0;i<M-1;i++)
for(j=i+1;j<M;j++)
if(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
}
void sort(float a[M])
{
int i,j;float t;
for(i=0;i<M-1;i++)
for(j=i+1;j<M;j++)
if(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
}
void sort(double a[M])
{
int i,j;double t;
for(i=0;i<M-1;i++)
for(j=i+1;j<M;j++)
if(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
}
推荐于2016-12-01
展开全部
函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。
重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。
试想如果没有函数重载机制,如在C中,必须要这样去做:为print函数取不同的名字,如print_int、print_string。
重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。
试想如果没有函数重载机制,如在C中,必须要这样去做:为print函数取不同的名字,如print_int、print_string。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
t;
int add(int x,int y);
void add(char *s1,char *s2);
void main()
{
char s1[10]="abcd",s2[10]="efgh";
int a=5,b=10;
cout<<add(a,b)<<endl;
add(s1,s2);
}
int add(int x,int y)
{
return x+y;
}
void add(char *s1,char *s2)
{
char s3[20];
int i;
int j;
for(i=0;;i++)
{
if(s1[i]=='\0') break;
s3[i]=s1[i];
}
for(j=0;;i++,j++)
{
if(s2[j]=='\0') break;
s3[i]=s2[j];
}
s3[i]='\0';
cout<<s3<<endl;
}
应该这样改吧,你那里for循环里的提交弄个i,而i被赋值为0,那条件不就是假了吗?for循环怎么可能进得去?
int add(int x,int y);
void add(char *s1,char *s2);
void main()
{
char s1[10]="abcd",s2[10]="efgh";
int a=5,b=10;
cout<<add(a,b)<<endl;
add(s1,s2);
}
int add(int x,int y)
{
return x+y;
}
void add(char *s1,char *s2)
{
char s3[20];
int i;
int j;
for(i=0;;i++)
{
if(s1[i]=='\0') break;
s3[i]=s1[i];
}
for(j=0;;i++,j++)
{
if(s2[j]=='\0') break;
s3[i]=s2[j];
}
s3[i]='\0';
cout<<s3<<endl;
}
应该这样改吧,你那里for循环里的提交弄个i,而i被赋值为0,那条件不就是假了吗?for循环怎么可能进得去?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这题目出得基本上就是脑残了。。。用模板实现还好说,用重载函数没什么意义,函数体完全可以一模一样……变相鼓励复制粘贴么……
参考答案:
#include<algorithm> //for std::sort
void mysort(int a[], std::size_t n)
{
std::sort(a, a + n);
}
void mysort(float a[], std::size_t n)
{
std::sort(a, a + n);
}
void mysort(double a[], std::size_t n)
{
std::sort(a, a + n);
}
std::sort可以换成另外的排序算法,这里只是示意……不过看题目要求没道理不给用就是了。
====
[原创回答团]
参考答案:
#include<algorithm> //for std::sort
void mysort(int a[], std::size_t n)
{
std::sort(a, a + n);
}
void mysort(float a[], std::size_t n)
{
std::sort(a, a + n);
}
void mysort(double a[], std::size_t n)
{
std::sort(a, a + n);
}
std::sort可以换成另外的排序算法,这里只是示意……不过看题目要求没道理不给用就是了。
====
[原创回答团]
参考资料: 原创
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询