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 :民国五年十二月二十六日,奉大总统令,任命蔡元培为北京大学校长。
蔡元培任国立北京大学校长的的就职演说:
各位,五年前严复先生为北大校长时,我服务于教育部,做教育总长。记得北大开学的那天,我为本校做了一点贡献。诸君,多自预科毕业而来,想必也知道,士别三日刮目相看,何况时日已过去数年。诸君与往昔相比,一定有了长足的进步。我今天就要服务于北大,我有三件事要告诉诸君:
一、抱定宗旨:
诸君来此求学,必有一定宗旨,须知宗旨,正大与否,必先知大学之性质。大学者,研究高深学问之者也。现在外面常常有人指责北大之腐败,是因为来此求学者,都抱有当官发财的思想,以此为捷径。因为一心要做官,一心想发财,所以从不问教员之学问深浅,唯问教员官职的大小。官阶大的就特别受欢迎,这大概是为了方便,毕业时有人提携吧。
我想说的是,诸君来北大求学,三年或四年,时间不谓不多,如能爱惜光阴,孜孜求学,则其造诣定然会很高很深。诸君来北大求学的宗旨,是做官发财,那这个宗旨就错了,求学的路,就必然走偏了。平时冶游,考试来了,才去翻读讲义,不问学问之有无,唯争分数之多寡。考试结束,书籍,束之高阁,毫不过问,潦草塞责,文凭到手,即可以此活动于社会,光阴虚度,学问毫无,这是自误啊。这与到北大求学的正真宗旨,是大相背驰的。
大家也许还记得,发生不久的辛亥革命,我们之所以要革命,就是因为清朝政府太腐败,就是现在也有许多人,对现状不满意,也是因为社会道德沦丧。诸君在这个时候,如果不打好基础,勤奋求学。万一为生计所迫,做了教员,则一定会耽误学生哪。你进入政界,则一定会耽误国家呀。这是耽误别人,误人误己。所以宗旨不可以不正大,这是我希望于诸君者之一。
二、砥砺德行:
如今的社会风气呀,越来越苟且敷衍。只顾眼前道德沦丧,败坏德行的事,触目皆是。不是德行根基牢固的人,少有不被这种社会风气所污染。各位,国家的兴衰,要看社会风气是高尚还是低劣。如果都流行于这种社会风气,前途不堪设想。所以,要有卓越之人,以身作则,尽力去矫正这种颓废的社会风气。诸君皆为大学学生,地位甚高,肩此重任,责无旁贷。如果德不修,学不讲,还与这种颓废的社会风气同流合污,那亦是侮辱自己,更何谈,做他人的榜样呢。所以,品行不可以不严谨对待和修养。这是我希望于诸君者之二。
三、尊敬师友:
坦诚相见,开诚布公,相互勉励。
各位,我们同处北大,要荣辱与共啊。我相信我们北大一定会是出文化大家,思想大家的地方。
我今天就说这么多,来日方长,随时在为商榷。