C++学习笔记(二)

5.C++函数新特性

内联函数、按引用传递变量、默认的参数值、函数重载(多态)、模板函数

 

5.1  内联函数的声明和定义都要在函数前面加上inline。内联函数不能递归。

        内联函数在编译的时候,直接将代码写在调用它的函数中。(C语言的宏)

 

5.2  引用

        必须在声明引用变量时进行初始化。

        返回引用的函数实际上是被引用的变量的别名。

       

        数据对象小,按值传递。

            数组,用指针

            类对象,用引用

            大型结构体,用指针或者对象

 

5.3  默认参数

int harpo(int n, int m=4, intj=5)

h=harpo(2);  则h=harpo(2,4,5);

h=harpo(2,8); 则h=harpo(2,8,5);

h=harpo(2,8,6); 则h=harpo(2,8,6);

有默认参数,没有赋值时,按照默认参数来;有赋值,则使用参数覆盖。

 

好处:减少定义的析构函数、方法、方法重载。

注意:只有原型指定了默认值。函数定义与没有默认参数时完全相同。

原型:

char * left(const char *str,  int n=1);

 

定义:

char * left(const char * str,int n)

{

……

}

 

5.4 函数重载(多态)

函数的参数,类型引用和类型本身视为同一特征标。

 

5.5 函数模板

 

template <typenameT>   或者template <class T>

 

实例化与具体化

 

template <class T>

void swap(T &, T &);

template <> void swap<job>(job &, job &);                 //显式具体化

int main()

{

            template voidswap<char>(char &, char &);       //显式实例化

            short a,b;

            …

            swap(a,b);                                                //隐式实例化,用模板生成函数

            job n,m;

            …

            swap(n,m);                                        //显式具体化

            char g,h;

            …

            swap(g,h);                                //显式实例化

 

}

 

 

声明类型的两种特殊关键字 decltype和auto

int x;

decltype(x) y;            //定义了与x相同类型的y

auto y=x;                   //定义了与x相同类型的y并赋值。

 

两者的结合使用:

template <class T1, classT2>

auto gt(T1 x, T2 y) ->decltype(x+y)

{

            …

            return x+y;

}

 

函数gt()返回类型未知,使用auto作为返回类型,后置指定返回类型是x+y。decltype(x+y)不能作为返回类型,因为x,y都没有定义,放在后面,x,y已经定义了。

 

6.头文件管理

在同一个文件中,只能包含一个头文件一次。可能将一个头文件包含多次的情况:可能使用了包含了另外一个头文件的头文件。

例如:

头文件myfile2.h包含#include “myfile1.h”,头文件myfile3.h包含了“myfile1.h”“myfile2.h”,那么,头文件myfile3.h就包含了myfile1.h两次了。

解决办法是每个头文件都使用#ifndef处理器编译指令:

            如在头文件1中

#ifndef MYFILE1_H_

#define MYFILE1_H_

…                                        //头文件中的内容部分

#endif

 

            在头文件myfile2.h中,第一次包含了myfile1.h,就#define MYFILE1_H_,到myfile.3要包含myfile1.h时,先判断MYFILE1_H_有没有被定义,发现已经定义了,就不在包含myfile1.h里面的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值