C++面向对象程序设计之C++的初步知识(3)

#include<iostream>
using namespace std;
int main()
{
int a=1;int b =2;
const float PI=3.14159;
//#define R a+b;    //此句有错误
const R=a+b;
cout <<PI*R*R<<endl;

system("pause");
return 0;
}

输出结果为28.2743 。

程序分析:

const定义了常变量PI,它具有变量的属性,有数据类型,占用存储单元,有地址,可以用指针指向它,只是在程序运行期间变量的值是固定的,不能改变。

const常与指针结合使用,有指向常变量的指针,常指针,指向常变量的常指针等。

1.3.3 函数原型声明

C++中,强制要求在函数调用之前必须对所调用的函数做函数原型声明。即:int max(int x, int y);  //max函数原型声明。

参数表中一般包括参数类型和参数名,也可以只包括参数类型而不包括参数名,如下两种写法等价:

int max(int x, int y);    //等价于下面

int max(int , int);

1.3.4 函数的重载

插入,提取运算符"<<",">>",本来是C和C++位运算中的左移运算符和右移运算符;重载其实就是一物多用。

C++允许在同一作用于中用同一函数名定义多个函数,这些函数的参数个数和参数类型不相同,这些同名函数用来实现不同的功能。这就是函数的重载,即一个函数名多用。

#include<iostream>
using namespace std;
int max(int a,int b, int c)            //求三个整数中的最大者
{
if (b>a) a=b;
if (c>a) a=c;
return a;
}

float max(float a,float b, float c)            //求三个整数中的最大者
{
if (b>a) a=b;
if (c>a) a=c;
return a;
}

long max(long a,long b, long c)            //求三个整数中的最大者
{
if (b>a) a=b;
if (c>a) a=c;
return a;
}

int main()
{
int a,b,c;
float d,e,f;
long g,h,i;

cin>>a>>b>>c;
cin>>d>>e>>f;
cin>>g>>h>>i;

int m;                                    //函数值为整型
m=max(a,b,c);
cout<<"max_f="<<m<<endl;

float n;                                    //函数值为实型
n=max(d,e,f);
cout<<"max_f="<<n<<endl;

long int p;                                    //函数值为长整型
p=max(g,h,i);
cout<<"max_f="<<p<<endl;
}

3个数中的最大值

程序分析:

main函数3次调用max函数,每次实参的类型都不同。系统会根据实参的类型找到与之匹配的函数,然后调用该函数。

上述的是参数个数相同而类型不同,实际上参数个数也可以不同而类型相同,例如“用一个函数求2个整数或者3个整数中的最大值”;至于参数不同,类型也不同还需读者自行研究。

1.3.5 函数模板

函数重载可以实现一个函数名多用,将实现相同或类似功能的函数用同一个函数名来定义。但3个函数内容基本相同,会显得太过冗长,为了简化,C++提供了函数模板。即建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代替,这个通用函数就称为函数模板。

3个整数选出最大值代码优化如下:

#include<iostream>
using namespace std;
template<typename T>                //模板声明,其中T为类型参数
T max(T a,T b,T c)                    //定义一个通用函数,用T做虚拟的类型名
{
if (b>a) a=b;
if (c>a) a=c;
return a;
}

int main()
{
int i1=8,i2=5,i3=6,i;
double d1=82.2,d2=53.4,d3=69.7,d;
long g1=78238,g2=-365,g3=45676,g;

i=max(i1,i2,i3);                    //调用模板函数,此时T被int代替
d=max(d1,d2,d3);                    //调用模板函数,此时T被double代替
g=max(g1,g2,g3);                    //调用模板函数,此时T被long代替

cout<<"max_i="<<i<<endl;
cout<<"max_d="<<d<<endl;
cout<<"max_g="<<g<<endl;

system("pause");
return 0;
}

3个数中最大数的模板优化

函数分析:

学会将多个函数内容相似的代码整合成一个函数。

模板声明和定义虚拟的类型名;调用函数,理解调用函数所做的替换。

模板函数的类型参数可以布置一个,根据需要确定个数。如:template<typename T1,typename T2>.

应注意,模板函数只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板。

1.3.6 有默认参数的函数

一般情况下,在函数调用时形参从实参那里取值,因此实参的个数应与形参相同。同时我们也可以给形参设置一个默认值。

如有一函数声明:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/704a395fc66352bfe16e015f30ba1748.html