C++简单问题?

来源:百度知道 编辑:UC知道 时间:2024/05/21 05:40:43
#include<iostream.h>
int cube(int i)
{
return i*i*i;
}
float cube(float f)
{
return f*f*f;
}
double cube(double d)
{
return d*d*d;
}
int main()
{
int i=12;
float f=3.4;
double d=5.67;
cout<<i<<"*"<<i<<"*"<<i<<"="<<cube(i)<<endl;
cout<<f<<"*"<<f<<"*"<<f<<"="<<cube(f)<<endl;
cout<<d<<"*"<<d<<"*"<<d<<"="<<cube(d)<<endl;
return 0;
}

运行后的提示:

--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
C:\Documents and Settings\Administrator\Cpp1.cpp(17) : warning C4305: 'initializing' : truncation from 'const double' to 'float'

没有出错,只是有一个编译警告而已了。

float f=3.4; 这一句,编译器把 3.4 默认作为一个 double 来处理,所以这里就相当于是把一个double赋值给一个float,因为double在32位编译器下面是64位,而float是32位,所以编译器会警告,因为有可能丢失数据。

float f = float( 3.4 );
改成这样就没有那个警告了,

PS:没有必要为三种不同的类型写三个重载,可以写一个模板函数。

如下,也是可以的~

#include <iostream>
using namespace std;

//int cube(int i)
//{
// return i*i*i;
//}
//float cube(float f)
//{
// return f*f*f;
//}
//double cube(double d)
//{
// return d*d*d;
//}

template<class T>
T cube( T v )
{
return v * v * v;
}

int main()
{
int i=12;
float f = float( 3.4 );
double d = 5.67;
cout<<i<<"*"<<i<<"*"<<i<<"="<<cube(i)<<endl;
cout<<f<<"*"<<f<<"*"<<f<<"="<<cube(f)<