函数(内联函数等)--C++复习(6)
一、return语句
1.返回非引用类型,则是复制返回值给表达式;
2.返回引用类型,则是返回对象本身;
3.不要返回局部变量的引用,因为函数退出局部变量会消失。
二、静态(static)局部变量
如果某个变量是静态局部变量,则一旦变量被初始化就一直存在,直到程序执行结束。
三、内联函数*
调用函数比求解表达式要慢得多。那么对于较短的程序片段,就适合将其指定为内联函数;这样降低写成函数的额外开销。
1 aaa.h 2 inline int max(int a,int b) 3 { 4 return a>b?a:b; 5 }
通常将内联函数放入头文件;如果在头文件中实现了函数(定义了),则即使没有在前面添加inline,该函数也是内联函数。
四、this指针*
每个类成员函数(static成员函数除外)都有一个额外的、隐含的this;在调用函数时形成this,初始化为调用函数的对象的地址。
五、常量成员函数
如果成员函数的参数列表后面加上const关键字,那么这个成员的this指针是指向const对象,该成员函数不能改变被调用对象的值:
1 void setname(string name )const; 2 3 void Person::setname(string name )const 4 { 5 this->name=name;//被调用对象实际上是Person *this;不能改变它的值 6 }//这种属于编译错误,操作类型为:const std::string*=std::string,报错
六、构造函数
和类名相同;没有返回值(连void也没有);作用是初始化成员变量,当创建一个类对象时就会调用构造函数;
构造函数初始化列表:在构造函数形参后面,冒号和{}之间的部分是初始化列表,如:
1 Per(int pid,string name,int age):_pid(pid),_name(name),_age(age){};
用来直接对成员变量进行初始化。
七、函数重载
这个简单,就是指函数名称相同,但是函数的参数不同或者类型不同,调用时通过参数来判断到底调用了哪个函数。
注意返回值不能构成函数的重载。
八、函数指针***
是指函数的指针而不是指对象的指针。
函数指针指向特定类型,由返回值以及参数列表来确定,如:int (*max)(int ,int); max就是一个函数指针,指向的是一个(返回值是int,参数列表是int,int)的函数。
1 int max(int,int); 2 3 int (*max)(int,int); 4 5 可以通过typedef来简化函数指针的定义 6 typedef int (*m)(int,int); 7 m a=max;//相当于a是函数指针变量 8 9 int r=max(1,2);//通过指针来调用函数,二者等价 10 int r=a(1,2);
函数指针形参,可以实现回调(没怎么用过):
1 void f(void (*x)(int,int)) 2 { 3 x(1,2); 4 } 5 6 7 void f2(int a,int b) 8 { 9 int x=a+b; 10 }
说明:要想调用f函数,则需要传递像f2这样的一个指针,由于函数名称代表函数指针,那么直接可以把f2函数名称传过去,即f(f2),回调是指f2里面的形参(int a,int b)是f中的(x(1,2))。调用过程:先调用f,f需要函数指针,我们将f2传过去,之后x(1,2)回过头来调用f2,这就是回调。
返回指向函数的指针(没怎么用过)