输入输出
int main()
{
//特点是自动识别类型
int i;
double d;
// >> 流提取
cin >> i >> d;
// << 流插入 endl 等价于 'n'
cout << i << endl;把i输出
cout << d << endl;
return 0;
}
一.缺省参数
(一)
给一个函数
void Func(int a=0)
{
cout << a << endl;
}
int main()
{
Func(1);
Func(2);
Func(3);
Func();//缺省 用的是函数里面赋的那个值 0
return 0;
}
(二)全缺省
void TestFunc(int a = 10, int b = 20, int c = 30)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl<
(三)半缺省
//半缺省 缺少部分参数 必须从右往左连续缺省 不能间隔
void TestFunc2(int a, int b = 20, int c = 30)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl << endl;
}
int main()
{
//TestFunc2(); 编不过
//TestFunc2(,2,3); 编不过
TestFunc2(1,2);// 1 2 30
TestFunc2(1,2,3);// 1 2 3
return 0;
}
注意:
1.缺省就是给函数的形参赋值.
2.不能在声明和定义同时出现 暨 两个都赋有初始值.
3.在缺省参数时,在声明中缺省.
二.函数重载
定义:即一个函数有多个意思
c++中允许 在同一作用域中 名称相同的多个函数.这些参数形参(个数,顺序,类型至少有一个)不同.
int Add(int left, int right)
{
return left + right;
}
double Add(double left, double right)
{
return left + right;
}
int main()
{
cout << Add(1, 2) << endl;
cout << Add(1.1, 2.2) << endl;
return 0;
}
函数名相同的两个函数会因为类型不同而区分开.上述中顺序不同指的是:数据类型的顺序为
doule int 和 int double
作用
在调用输出类型函数时尤为方便
void Swap(double* p1, double* p2)
{
double tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
void Swap(int* p1, int* p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int main()
{
int a = 1, b = 2;
double c = 1.1, d = 2.2;
Swap(&a, &b);
Swap(&c, &d);//方便使用
return 0;
}
三.引用
定义:给已存在的变量取了一个别名. int& x=a;给a起了个外号叫x
int main()
{
int a = 0;
int& b = a;//&放在类型后面 引用
cout << &b << endl;//取地址并打印
a++;
b++;//效果和a++一样 二者控制同一块空间
int x = 10;
b = x;//b不是x的别名 这里是赋值的意思
}
注意
1.引用在定义时必须初始化 即不能 int& b
2.一个变量可以有多个引用,给别名取别名仍然是同一块空间;
三.2.作用
1.做输出型参数
Swap2(int& r1, int& r2)
{
int tmp = r1;
r1 = r2;
r2 = tmp;
}
int main()
{
int c = 0, d = 2;
Swap2(c, d);
}
2.大对象传参,提高效率
3.做返回值.
int Count()//传值返回
{
static int n = 0;
n++;
return n;
}//n不是表达式的返回值,是用的n的拷贝
int& Count2()//引用返回
{
static int n = 0;//int n =0; 出了作用域n销毁 用静态可以使用
n++;
return n;//返回n的别名
}//n的别名是表达式的返回值
int main()
{
int ret = Count2();
cout << ret << endl;
return 0;
}
总结 :如果出了函数的作用域 返回对象就销毁了.那么一定不能引用返回,一定要用传值返回.



