个人C++速成笔记(1) -- C++与C不一样的地方:内联函数、默认参数、函数重载、函数模板、库函数的调用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37697335/article/details/85042265

之前学过C,现在想稍微学习下C++,由于上班,只能利用平时的空闲时间学习,记录一下学习历程,激励自己有始有终,博客内容主要记录C与C++不同的地方。

                                                                                       --始于2018.12.16,终于。。。

1、内联函数(2018.12.16)

 C++提供一种提高函数效率的方法,即在编译时将被调函数的代码直接嵌入到主调函数中,取消调用这个环节。这种嵌入到主调函数中的函数称为内联函数(inline function)。

内联函数的声明是在函数定义的类型前加上inline修饰符,定义形式为:

inline 返回类型 函数名(形式参数列表)
{
    函数体
}

注意事项:1、内联函数中不允许用循环语句和switch语句。2、内联函数的声明必须出现在内联函数第一次被调用之前。

个人体会:该方法和C语言使用宏定义define来实现的原理(都是编译时替换)和效果是一样的,都是可以提高运行效率, 但是都会占据更大的程序存储空间。

2、默认参数(2018.12.17)

  C++允许在函数定义或函数声明时,为形参指定默认值,这样的参数称为默认参数(default argument),一般形式为:

返回类型 函数名(...,类型 默认参数名=默认值)
{ 函数体 }

注意事项:1、如果在函数定义时设置了默认参数,那么就不能在函数声明中再次设置,反之亦然。2、可以设置多个默认参数,设置的顺序为自右向左,换言之,要为某个参数设置默认值,则它右边的所有参数必须都是默认参数。3、默认值可以是常量、全局变量,甚至是一个函数调用(调用实参必须是常量或全局变量的表达式),不可以是局部变量。4、默认参数本质上是编译器根据函数声明或函数定义时的默认参数设置,对函数调用中没有给出来的实参自动用默认值表达式“补齐”再进行编译。

个人体会:相较于C,C++提供默认参数这个选项给了函数的更多实现形式,由于经验不足,尚未知道这种默认参数的好处。

详细课件:默认参数

3、函数重载(2018.12.17)

函数重载(function overloading)是在同一个域中用同一个函数名来定义多个函数,但函数参数列表应彼此有不同,或者是参数个数不同,或者是参数类型不同,或者两者均有不同。比如:

注意事项:1、重载函数的形参必须不同(个数不同或类型不同)。2、编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。3、不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。

个人体会:函数重载使得具有同一功能的一类函数拥有相同的名字,简直是命名恐惧症患者们的福音,使用这种方法使得使用一个名字就能够应对不同类型、个数不同的输入参数。比如:

#include <iostream>
using namespace  std;
int max( int a, int b)  // 整型版本
{
    return  (a>b ? a:b);
}
double max( double a,  double b)  // 双精度版本
{
    return  (a>b ? a:b);
}
long  max( long a, long b)  // 长整型版本
{
    return  (a> b  ?  a:b);
}

详细课件:函数重载

4、函数模板(2018.12.18)

函数模板(function template)是一个独立于类型的函数,可作为一种模式,产生函数的特定类型版本。

使用函数模板可以设计通用型的函数,这些函数与类型无关并且只在需要时自动实例化,从而形成“批量型”的编程方式。

函数模板定义的语法形式为:

template<模板形参表> 返回类型 函数名(形参列表)
{
    函数体
}

template<typename T> T abs(T x)
{ 
    return x<0?-x:x; 
}

int main()
{ 
    int n=-5; double d=-5.5;
    cout<<abs(n)<<‘,’<<abs(d)<<endl;
    return 0;
}

模板形参表(template parameter list)是用一对尖括号括< >括起来的一个或多个模板形参的列表,不允许为空,形参之间以逗号分隔,其形式有两种:

①第一种形式:typename 类型参数名 1, typename 类型参数名,...........(较常用)

②第二种形式:class 类型参数名 1,  class 类型参数名,..............

个人体会:感觉函数模板是函数重载的一个特例,他解决的是同样的函数名拥有同样的参数个数,但是参数的类型不一样的问题。实现也没有函数重载那么麻烦。

注:1、模板函数的真正代码是在( 源程序中调用函数时)时候产生。

5、库函数的调用(2018.12.18)

 所谓库函数是指事先由别的程序员编制好的函数。这里和C语言差不多,就是调用别人实现好的函数,当然这些函数可能 是源码可见 的函数,也可能是别人封装好仅能调用 的函数(二进制库),你安照说明调用就好。

猜你喜欢

转载自blog.csdn.net/m0_37697335/article/details/85042265