本文内容仅作学习交流使用,如需转载请联系我。
今天学习了函数的重载
函数重载:如果在一个类中定义了几个名字相同的函数,但是形参列表不同,就称之为重载,例如:void print(const int * start,const int *end)和void print(const int ia[],size_t size),void print(const char*ap); 这两个函数虽然名字相同,但是形参类型不同,当调用函数的时候,编译器会根据传递的实参类型推断想要的是哪个函数.int j[2]={0,2}print("Hellow world");print(j,end(j)-begin(j));如果两个函数不仅名字一样,形参类型一样但是返回类型不同,第二个函数则是错误的。形参中有没有const无法区别两个函数。Record lookup(Phone);Record lookup(const Phone);这两个函数是一样的,因为const 不能改变类型string read();void print(cosnt string&); //重载了print函数void print(double); void fooBar(int ival){ nool read =false ; //新作用域:隐藏了外层的read string s=read(); //read 是个布尔值 void print(int ) //新作用域 隐藏了之前的print void print("Value :"); // 错误,因为之前的void print(cosnt string&)被隐藏了 print(ival); //正确,当前的print(int)可见 print(3.14); //正确:调用print(int) print(double)被隐藏了}------------------------------------------------------------------------------------------------------------------
#include<iostream>using namespace std;int main01(void){ int a = 10; int b = 20; (a < b ? a : b) = 30; int c = 10; int d = 20; *(a < b ? &a : &b) = 30;//这两个程序是一样的结果 但是在C中只能用这样的方法给a或b赋值 return 0;}
c中表达式返回的值是一个数组,在c++中返回的是变量本身。int a=;int b=20;(a<b?a:b)=30; 在c语言中不允许这样子写程序;但是我们可以通过修改地址的内容来达到修改值的目的;*(a<b?&a:&b)=30; 这样就可以了
//------------------------------------------------------------------int main02(void){ const int a = 10; int *p = NULL; p = (int *)&a; //在c++中, 当一个变量添加const后,这个变量就会被放到符号表中,不能被修改 *p = 20; //当你调用这个变量的时候,就会自动从符号表中取出值,从而将这个变量变成常量 cout << a << endl; // 当一个指针指向const变量的时候,cpu会在内存中给这个指针另外开辟一个空间, cout << *p << endl; //这个指针指向另外一个空间。 return 0;}
宏定义#define 定义的变量可以跨函数使用,只是将变量换成你定义的东西如果不想让改变量在其他领域内使用只需要#undefconst 定义的变量是有作用域的,只能在该作用域内使用
----------------------------------------------------------------------------------------------------------------------------------------------------------
以下内容整理于《征服C指针》先看一个函数int atexit(void( (*func)(void)); 这个函数怎么描述呢,我们能确定他是一个函数,然后看对他的参数。先看标识符 func。 func是一个指针,指向什么呢?指向一个函数,这个函数又是什么样子呢,他是一个参数为void 返回类型也为void的一个函数。那么我们就可以说,atexit是返回类型为int (参数是一个指向返回为void没有参数的一个函数指针)。接下来再看一个。void(*signal(int sig,void(*func)(int)))(int);这个就比较复杂了,还是慢慢来 先着眼于标识符signal,我们可以把括号范围先搞清楚。signal是一个函数,他有两个参数,一个是sig 他的类型是Int接下来看另一个参数void(*func)(int);再接着看标识符func func是一个指针,指向一个函数。这个函数有一个参数,这个参数参数是int。所以func是一个指向(参数是int)(返回值是void)类型的函数的指针。signal是一个函数(一个参数是int,另一个是(指向(参数是int)( 返回类型是void的函数的指针)) 返回一个指针的函数。那么他返回的指针指向什么呢,指向参数是int 返回类型为void的函数的指针。
今天的学习就到这里了。
欢迎大家关注我的网易云账号:爱因斯坦的手套
2017.03.05
新闻热点
疑难解答