函数(内联函数等)--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,这就是回调。

       返回指向函数的指针(没怎么用过)

 

posted @ 2019-09-16 23:20  WeAreFighters  阅读(175)  评论(0编辑  收藏  举报