#include<iostream>
using namespace std;
//定义了一个函数模板,采用引用传参
template <class A>
void mswap(A &a, A &b)
{
A c;
c = a;
a = b;
b = c;
{
int a1 = 5, b1=6;
float a2 = 1.5, b2 = 3.5;
char a3 = 'a', b3 = 'b';
cout << "now a1 is:" << a1 << "\tnow b1 is:" << b1 << endl
<< "now a2 is:" << a2 << "\tnow b2 is:" << b2 << endl
<< "now a3 is:" << a3 << "\tnow b3 is:" << b3 << endl;
cout << "Let's swap them\n";
mswap(a1, b1);
mswap(a2, b2);
mswap(a3, b3);
cout << "now a1 is:" << a1 << "\tnow b1 is:" << b1 << endl
<< "now a2 is:" << a2 << "\tnow b2 is:" << b2 << endl
<< "now a3 is:" << a3 << "\tnow b3 is:" << b3 << endl;
return 0;
using namespace std;
//定义了一个函数模板,采用引用传参
template <class A>
void mswap(A &a, A &b)
{
A c;
c = a;
a = b;
b = c;
}
/*A是一种类型,当实际调用的时候会根据参数类型而变化,比如a,b是int类型的,那么在实际调用时就会变成int类型的,而a,b是float类型的,那么在实际调用的时候就会变成float类型的。*/
int main(){
int a1 = 5, b1=6;
float a2 = 1.5, b2 = 3.5;
char a3 = 'a', b3 = 'b';
cout << "now a1 is:" << a1 << "\tnow b1 is:" << b1 << endl
<< "now a2 is:" << a2 << "\tnow b2 is:" << b2 << endl
<< "now a3 is:" << a3 << "\tnow b3 is:" << b3 << endl;
cout << "Let's swap them\n";
mswap(a1, b1);
mswap(a2, b2);
mswap(a3, b3);
cout << "now a1 is:" << a1 << "\tnow b1 is:" << b1 << endl
<< "now a2 is:" << a2 << "\tnow b2 is:" << b2 << endl
<< "now a3 is:" << a3 << "\tnow b3 is:" << b3 << endl;
return 0;
}
/*引用传参和传值的区别,比如刚才的函数是这样传参的
template <class A>
void mswap(A a, A b)
{
A c;
c = a;
a = b;
b = c;
}
在调用时mswap(a1,b1)它的意思就是将a1,b1的值传递给mswap函数,函数执行过并没有改变a1,b1单元里的值
而函数如果是
void mswap(A &a, A &b)
这样的话,在调用的时mswap(a1,b1)它的意思就是将a1,b1的地址传递给了mswap函数,函数会将a1,b1的地址进行交换,这样就达到了将a1,b1的值进行交换了
*/