C++学习 --- 函数提高

一、函数默认参数

#include <iostream>
using namespace std;
​
//函数默认参数
//如果我们自己传入了数据,就用自己的数据,如果没有,那么就用默认值。
//语法:  返回值类型  函数名( 形参 = 默认值 )
int func(int a, int b = 20, int c = 30) {
    return a + b + c;
}
​
//注意事项
//如果某个位置已经有了默认参数,那么这个位置往后,从左到右都必须有默认值
int func2(int a, int b = 2, int c = 3,int d = 2) {
    return a + b + c + d;
}
​
//如果函数的声明有了默认参数,那么函数的实现不能有默认参数,否则重定义默认参数
//函数声明和实现只能一个有默认值
int func3(int a,int b);
int func3(int a = 10, int b = 10){
    return a + b;
}
​
int main() {
    cout << func(10,30) << endl;
    cout << func2(10, 30) << endl;
    cout << func3() << endl;
    system("pause");
    return 0;
}

 

二、函数占位参数

#include <iostream>
using namespace std;
​
//占位参数
//返回值类型  函数名(数据类型){}
//目前阶段占位参数用不到,后面课程会用到
//占位参数还可以有默认参数
void func(int a , int = 10 ) {
    cout << "this is function " << endl;
}
​
int main() {
    //占位参数没有默认参数,必须填补
    func(10,10);
    
    //占位参数有默认参数,可以省略
    func(10);
​
    system("pause");
    return 0;
}

 

三、函数重载

#include <iostream>
using namespace std;
​
//函数重载
//可以让函数名相同,提高复用性
void func() {
    cout << "func 的调用" << endl;
}
​
//函数重载的满足条件
//1.全局作用域下
//2.函数名称相同
//3.函数参数类型不同,或者个数不同,或者顺序不同
void func(int a) {
    cout << "func (int a)的调用" << endl;
}
​
void func(double a) {
    cout << "func (double a)的调用" << endl;
}
​
void func(int a,double b) {
    cout << "func(int a,double b)的调用" << endl;
}
​
void func(double a, int b) {
    cout << "func(double a, int b)的调用" << endl;
}
​
//注意事项:函数的返回值不可以作为函数重载的条件。
//int func(double a, int b) {
//  cout << "func(double a, int b)的调用" << endl;
//  return 0;
//}
int main() {
    func();
    func(10);
    func(3.14);
​
    func(10,3.14);
    func(3.14,10);
    system("pause");
    return 0;
}

 

函数重载注意事项:

#include <iostream>
using namespace std;
​
//函数重载的注意事项
//1.引用作为重载的条件
void func(int &a) {
    cout << " func(int &a) " << endl;
}
​
 
//加const后函数类型不同
void func(const int &a) {
    cout << " func(const int &a) " << endl;
}
​
//2.函数重载碰到默认参数 
void func2(int a,int b = 10) {
    cout << " func2(int a,int b = 10)的调用 " << endl;
}
​
void func2(int a) {
    cout << " func2(int a)的调用 " << endl;
}
​
​
int main() {
    
    int a = 10;
    func(a);
​
    //分析:int &a 本质是 int * const a;  
    //int & a = 10; 不合法,引用必须要有一个合法的内存空间,要么在栈区,要么在堆区,不可以在常量区  
    //const int &a = 10; 合法。只能走下面的代码  
    func(10);  
    
    //多个重载函数实例和参数列表一致
    //二义性。需要避免
    //func2(10);
    func2(10,10);
    system("pause");
    return 0;
}

 

补充:常量引用和非常量引用
 
《觉醒年代》- 6 :民国五年十二月二十六日,奉大总统令,任命蔡元培为北京大学校长。

蔡元培任国立北京大学校长的的就职演说:

​    各位,五年前严复先生为北大校长时,我服务于教育部,做教育总长。记得北大开学的那天,我为本校做了一点贡献。诸君,多自预科毕业而来,想必也知道,士别三日刮目相看,何况时日已过去数年。诸君与往昔相比,一定有了长足的进步。我今天就要服务于北大,我有三件事要告诉诸君:

一、抱定宗旨:

​    诸君来此求学,必有一定宗旨,须知宗旨,正大与否,必先知大学之性质。大学者,研究高深学问之者也。现在外面常常有人指责北大之腐败,是因为来此求学者,都抱有当官发财的思想,以此为捷径。因为一心要做官,一心想发财,所以从不问教员之学问深浅,唯问教员官职的大小。官阶大的就特别受欢迎,这大概是为了方便,毕业时有人提携吧。

​    我想说的是,诸君来北大求学,三年或四年,时间不谓不多,如能爱惜光阴,孜孜求学,则其造诣定然会很高很深。诸君来北大求学的宗旨,是做官发财,那这个宗旨就错了,求学的路,就必然走偏了。平时冶游,考试来了,才去翻读讲义,不问学问之有无,唯争分数之多寡。考试结束,书籍,束之高阁,毫不过问,潦草塞责,文凭到手,即可以此活动于社会,光阴虚度,学问毫无,这是自误啊。这与到北大求学的正真宗旨,是大相背驰的。

​    大家也许还记得,发生不久的辛亥革命,我们之所以要革命,就是因为清朝政府太腐败,就是现在也有许多人,对现状不满意,也是因为社会道德沦丧。诸君在这个时候,如果不打好基础,勤奋求学。万一为生计所迫,做了教员,则一定会耽误学生哪。你进入政界,则一定会耽误国家呀。这是耽误别人,误人误己。所以宗旨不可以不正大,这是我希望于诸君者之一。

二、砥砺德行:

​    如今的社会风气呀,越来越苟且敷衍。只顾眼前道德沦丧,败坏德行的事,触目皆是。不是德行根基牢固的人,少有不被这种社会风气所污染。各位,国家的兴衰,要看社会风气是高尚还是低劣。如果都流行于这种社会风气,前途不堪设想。所以,要有卓越之人,以身作则,尽力去矫正这种颓废的社会风气。诸君皆为大学学生,地位甚高,肩此重任,责无旁贷。如果德不修,学不讲,还与这种颓废的社会风气同流合污,那亦是侮辱自己,更何谈,做他人的榜样呢。所以,品行不可以不严谨对待和修养。这是我希望于诸君者之二。

三、尊敬师友:

​    坦诚相见,开诚布公,相互勉励。

​    各位,我们同处北大,要荣辱与共啊。我相信我们北大一定会是出文化大家,思想大家的地方。

​    我今天就说这么多,来日方长,随时在为商榷。

 

posted @ 2021-08-10 12:22  yiwenzhang  阅读(39)  评论(0编辑  收藏  举报