1.函数的重载:
#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;
}
int max(int a,int b)
{
if(b>a) a=b;
return a;
}
long max(long d,long e,long f)
{
if (e>d) d=e;
if(f>d) d=f;
return d;
}
int main()
{
int a,b,c;
long d,e,f;
cin>>a>>b>>c;
cin>>d>>e>>f;
cin.get();
cout<<max(a,b,c)<<endl;
cout<<max(d,e,f)<<endl;
cout<<max(a,b)<<endl;
cin.get();
return 0;
}
2.函数模版的运用
#include <iostream>
using namespace std;
template<typename T>
T max(T a,T b, T c)
{
if (b>a) a=b;
if(c>a) a=c;
return a;
}
int main()
{
int i1,i2,i3,i;
double d1,d2,d3,d;
long g1,g2,g3,g;
cin>>i1>>i2>>i3;
cin>>d1>>d2>>d3;
cin>>g1>>g2>>g3;
cin.get();
i=max(i1,i2,i3);
d=max(d1,d2,d3);
g=max(g1,g2,g3);
cout<<"i_max="<<i<<endl;
cout<<"d_max="<<d<<endl;
cout<<"g_max="<<g<<endl;
cin.get();
return 0;
}
3.关于变量的引用:例如
#include <iostream>
using namespace std;
int main()
{
int a=5;
int &b=a;
a=a*a;
cout<<a<<endl<<b<<endl;
cin.get();
a=a/5;
cout<<a<<endl<<b<<endl;
cin.get();
return 0;
}
4.引用作为函数参数
1)将变量名作为实参:
//以下程序无法实现i和j的互换
#include <iostream>
using namespace std;
int main( )
{ void swap(int,int); //函数声明
int i=3,j=5;
swap(i,j); //调用函数swap
cout<<i<<endl<<j<<endl; //i和j的值未互换
cin.get();
return 0;
}
void swap(int a,int b) //企图通过形参a和b的值互换,实现实参i和j的值互换
{ int temp;
temp=a; //以下3行用来实现a和b的值互换
a=b;
b=temp;
}
2)传递变量指针:
//以下程序可以实现i和j的互换
#include <iostream>
using namespace std;
int main( )
{ void swap(int *,int *);
int i=3,j=5;
swap(&i,&j); //实参是变量的地址
cout<<i<<endl<<j<<endl; //i和j的值已互换
cin.get();
return 0;
}
void swap(int *p1,int *p2) //形参是指针变量
{ int temp;
temp=*p1; //以下3行用来实现i和j的值互换
*p1=*p2;
*p2=temp;
}
3)传递变量的别名:
//以下程序也可以实现i和j的互换
#include <iostream>
using namespace std;
int main( )
{ void swap(int &,int &);
int i=3,j=5;
swap(i,j);
cout<<"i="<<i<<endl<<"j="<<j<<endl;
cin.get();
return 0;
}
void swap(int &a,int &b) //形参是引用类型
{ int temp;
temp=a;
a=b;
b=temp;
}
5.可以用常量或表达式对引用进行初始化,还可以用不同类型的变量对之初始化,但是必须加const,例如:
int main()
{
int a=5; //此时内部机制为:int temple=a+3;const &b=temple;temple为临时变量
const int &b=a+3;
double d=3.1415926;
const int &c=d;
cout<<a<<endl<<b<<endl;
cout<<d<<endl<<c<<endl;
cin.get();
return 0;
}
6.内置函数:在函数首行左端加inline——将函数嵌入到主函数中,提高编译效率;
#include <iostream>//内置函数
using namespace std;
inline int max(int a,int b,int c)
{
if (b>a) a=b;
if(c>a) a=c;
return a;
}
int main()
{
int a,b,c;
cin>>a>>b>>c;
cin.get();
cout<<max(a,b,c)<<endl;
cin.get();
return 0;
}
7.字符与字符数组,例如:
#include <iostream>//比较大小
#include <string>
using namespace std;
string max(string string1,string string2,string string3)
{
if (string2>string1) string1=string2;
if(string3>string1) string1=string3;
return string1;
}
int main()
{
string string1,string2,string3,str;
cin>>string1>>string2>>string3;
str=max(string1,string2,string3);
cin.get();
cout<<"s_max="<<str<<endl;
cin.get();
return 0;
}
8.new与delete的使用,例如:
//开辟空间以存放一个结构体变量。
#include <iostream>
#include <string>
using namespace std;
struct Student //声明结构体类型Student
{ string name;
int num;
char sex;
};
int main( )
{ Student *p; //定义指向结构体类型Student的数据的指针变量
p=new Student; //用new运算符开辟一个存放Student型数据的空间
p->name="Wang Fun"; //向结构体变量的成员赋值
p->num=10123;
p->sex='m';
cout<<p->name<<endl<<p->num
<<endl<<p->sex<<endl;//输出各成员的值
cin.get();
delete p;//撤销该空间
cin.get();
return 0;
}
9.对象成员的引用
#include <iostream>
using namespace std;
class Time
{
public:
int hour;
int minute;
void output(int hour,double minute)
{
this->hour=hour;
this->minute=minute;
}
};
int main()
{
Time t,*p;
t.output(16,36);
cout<<t.hour<<endl;//通过指向对象的引用来访问对象中的成员
cin.get();
p=&t;
cout<<p->hour<<endl;//通过指向对象的指针来访问对象中的成员
cin.get();
Time &t1=t;
cout<<t1.hour<<endl;//通过对象名访问成员
cin.get();
return 0;
}
10.关于对象指针的用法:例如
#include <iostream>//有关指向对象成员的指针
using namespace std;
class Time
{public:
Time(int,int,int);
int hour;
int minute;
int sec;
void get_time( );
};
Time::Time(int h,int m,int s)
{hour=h;
minute=m;
sec=s;
}
void Time::get_time( ) //声明公有成员函数
//定义公有成员函数
{cout<<hour<<":"<<minute<<":" <<sec<<endl;}
int main( )
{Time t1(10,13,56); //定义Time类对象t1
int *p1=&t1.hour; //定义指向整型数据的指针变量p1,并使p1指向t1.hour
cout<<* p1<<endl; //输出p1所指的数据成员t1.hour
t1.get_time( ); //调用对象t1的成员函数get_time
Time *p2=&t1; //定义指向Time类对象的指针变量p2,并使p2指向t1
p2->get_time( ); //调用p2所指向对象(即t1)的get_time函数
void (Time::*p3)( ); //定义指向Time类公用成员函数的指针变量p3
p3=&Time::get_time; //使p3指向Time类公用成员函数get_time
(t1.*p3)( ); //调用对象t1中p3所指的成员函数(即t1.get_time( ))
cin.get();
return 0;
}