读书人

关于C++重载的有关问题为什么数值被

发布时间: 2012-04-09 13:41:25 作者: rapoo

关于C++重载的问题,为什么数值被截取了?
/////////////////////////////////////////////////////////////////////////////////////////////

//用同一个函数名对n个数据进行从小到大排序,数据类型有int float double
//用重载函数实现。



#include <iostream>
using namespace std;

//int型参数的函数
void SortN(int *a, int n)
{
int i,j,t;
for(i=0; i<n-1; i++)
for(j=0; j<n-1-i; j++)
if(*(a+j)>*(a+j+1))
{t=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=t; }
}

//float型参数的函数
void SortN(float *a, int n)
{
int i,j,t;
for(i=0; i<n-1; i++)
for(j=0; j<n-1-i; j++)
if(*(a+j)>*(a+j+1))
{t=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=t; }
}

//double型参数的函数
void SortN(double *a, int n)
{
int i,j,t;
for(i=0; i<n-1; i++)
for(j=0; j<n-1-i; j++)
if(*(a+j)>*(a+j+1))
{t=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=t; }
}

int main()
{
int i;
int a[5]={9,2,5,3,8};
float b[5]={9.9, 6.6, 4.4, 7.7, 2.2};
double c[5]={5.55,3.33,8.88,6.66,1.11};

SortN(a,5);
cout<<"the sort of int is:";
for(i=0; i<5; i++)
cout<<a[i]<<' ';
cout<<endl<<endl;

SortN(b,5);
cout<<"the sort of float is:";
for(i=0; i<5; i++)
cout<<b[i]<<' ';
cout<<endl<<endl;

SortN(c,5);
cout<<"the sort of double is:";
for(i=0; i<5; i++)
cout<<c[i]<<' ';
cout<<endl<<endl;

return 0;
}

//////////////////////////////////////////////////////////////////////////////////////
//运行结果:2 3 5 8 9
2.2 4 6 7 9
1.11 3 5 6 8

//为什么第二个float、和double都被截取为int了?

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

[解决办法]
t=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=t;
t是int整形,所以发生了类型转换,被截去了.改为float t 和 double t就好
[解决办法]
void SortN(float *a, int n)
{
int i,j,t;
for(i=0; i<n-1; i++)
for(j=0; j<n-1-i; j++)
if(*(a+j)>*(a+j+1))
{ t=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=t; }
}

t是int类型的啊.....
[解决办法]
//float型参数的函数
void SortN(float *a, int n)
{
int i,j;
float t;
for(i=0; i<n-1; i++)
for(j=0; j<n-1-i; j++)
if(*(a+j)>*(a+j+1))
{ t=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=t; }
}

//double型参数的函数
void SortN(double *a, int n)
{
int i,j;
double t;
for(i=0; i<n-1; i++)
for(j=0; j<n-1-i; j++)
if(*(a+j)>*(a+j+1))
{ t=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=t; }
}

将t 修改为float double类型

读书人网 >C++

热点推荐