C++函数的升级下_5

一。重载(Overload)

  1.同一个标识符在不同的上下文有不同的意义

  如:“洗”不同的含义

    - 洗衣服、洗脸、洗脑

  如:“play”和不同的单词搭配后不同的含义

    -play chess, play piano

  2.函数重载(Function Overload)

    a.用同一个函数名定义不同的函数

    b.当函数名和不同的参数搭配时函数的含义不同

      int func(int x)

      int func (int a, int b )

      int func(const char* s )

  3.函数重载至少满足下面一个条件

    a。参数个数不同

    b. 参数类型不同

    c。参数顺序不同

#include <stdio.h>
#include <string.h>

int func(int x)
{
    return x;
}

int func(int a, int b)
{
    return a + b;
}

int func(const char* s)
{
    return strlen(s);
}

int func(int a, const char* s)
{
    return a;
}

int func(const char* s, int a)
{
    return strlen(s);
}

int main(int argc, char *argv[])
{
    int c = 0;

    c = func("ab", 1);

    printf("c = %d\n", c);

    printf("Press enter to continue ...");
    getchar();
    return 0;
}

  4.函数默认参数遇上函数重载会发生什么?

#include <stdio.h>
#include <string.h>

int func(int a, int b, int c = 0)
{
    return a * b * c;
}

int func(int a, int b)
{
    return a + b;
}

int main(int argc, char *argv[])
{
    int c = 0;

    c = func(1, 2); // 存在二义性,调用失败,编译不能通过 

    printf("c = %d\n", c);

    printf("Press enter to continue ...");
    getchar();
    return 0;
}

5.编译器调用重载函数的准则

  a.将所有同名函数作为候选者

  b.尝试寻找可行的候选函数

    #精确匹配实参

    #通过默认参数能够匹配实参

    #通过默认类型转换匹配实参

  c.匹配失败

    #最终寻找到的可行候选函数不唯一,若出现二义性,编译失败

    #无法匹配所有的候选者,函数未定义,编译失败。

6.函数重载的注意事项

  #重载函数在本质上是相互独立的不同函数

  #重载函数的类型是不同的

  #函数返回值不能作为函数重载的依据

7.下面程序中哪个函数将被调用

  

#include <stdio.h>
#include <string.h>

int func(int x) // int(int a)
{
    return x;
}

int func(int a, int b)
{
    return a + b;
}

int func(const char* s)
{
    return strlen(s);
}

typedef int(*PFUNC)(int a); // int(int a)

int main(int argc, char *argv[])
{
    int c = 0;
    PFUNC p = func;

    c = p(1);

    printf("c = %d\n", c);

    printf("Press enter to continue ...");
    getchar();
    return 0;
}

  输出结果C = 1

7.函数重载与函数指针

  #当使用重载函数名与函数指针进行幅值时

    a.根据重载规则挑选与函数指针参数列表一致的候选者

    b.严格匹配候选者的函数类型和函数指针的函数类型

二。C++和C的相互调用

  1.在项目中融合C++和C代码是实际工程中不可避免的

  2.虽然C++编译器能够兼容C语言的编译方式,但C++编译器会优先使用C++的方式进行编译。

  3.利用extern关键字强制让C++编译器对代码进行C方式编译

   例:  extern

时间: 2024-12-13 01:55:39

C++函数的升级下_5的相关文章

使用windows API函数获取目录下所有文件名---目录下文件的扫描和处理

直接上代码 // test_max.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <windows.h> #include <Shlwapi.h> #include <iostream> #include <string> #include <vector> #pragma comment(lib,"shlwapi.lib") //注意放置的位置

如何在不使用系统函数的情况下实现PHP中数组系统函数的功能

PHP中为我们提供了各种各样的系统函数来实现我们需要的各种功能,那么,在不使用系统函数的情况下我们要怎样来实现这些功能呢?以下就是几种系统函数的实现方式. 首先,我们来定义一个数组: $arr= array(1,2,3,4,5,6,"a"=>7,"b"=>8,"c"=>"haha",10); 以下是对于这个数组可以使用的系统函数和不使用系统函数获得同样效果的方式: 1.返回数组的所有的值,返回数组.(arra

美丽联合业务升级下的机器学习应用

通常机器学习在电商领域有三大应用,推荐.搜索.广告,这次我们聊聊三个领域里都会涉及到的商品排序问题.从业务角度,一般是在一个召回的商品集合里,通过对商品排序,追求GMV或者点击量最大化.进一步讲,就是基于一个目标,如何让流量的利用效率最高.很自然的,如果我们可以准确预估每个商品的GMV转化率或者点击率,就可以最大化利用流量,从而收益最大. 蘑菇街是一个年轻女性垂直电商平台,主要从事服饰鞋包类目,2015年时全年GMV超过了百亿,后与美丽说合并后公司更名为美丽联合集团.2014年时入职蘑菇街,那时

第9课 函数重载分析(下)

1. 重载与函数指针 (1)将重载函数名赋值给函数指针时 ①根据重载规则挑选与函数指针参数列表一致的候选者 ②严格匹配候选者的函数类型与函数指针的函数类型(所谓严格匹配,即函数参数及返回值都匹配) [编程实验]函数重载 VS 函数指针 #include <stdio.h> #include <string.h> int func(int x) { return x; } int func(int a, int b) { return a + b; } int func(const

c++ 专题一 函数的升级1

由变量中的const与define的定义 到 函数段中的 incline 的引出 注意内联函数与函数调用的区别 一.什么叫inline函数? inline(小心,不是online),翻译成“内联”或“内嵌”.意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置.这样做的好处是省去了调用的过程,加快程序运行速度.(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间).这样做的不好处:由于每当代码调用到内联函数,就需要在调用处

JS函数:返回下一个元素节点

1 //寻找先一个元素节点的函数,把一个元素的下一个节点(nextSibing)作为参数传给该函数,经过筛选返回元素节点 2 function nextElementSiblings(node){ 3 if(node.nodeType == 1){ 4 return node; 5 } 6 if(node.nextSibling){ 7 return nextElementSiblings(node.nextSibling); 8 } 9 return null; 10 }

php的getallheaders函数在nginx下失效的解决办法

今天将apache下的php应用部署到了nginx上,却发现报错:找不到getallheaders()这个函数. 很惊奇,这不是php的默认函数么,怎么给我找不到了.但问题就是出现了,只能去找解决方法. 原来此函数是apache_request_headers()函数的别名,看到了吧,带有apache的血统,因此nginx不能用很正常了. 找到原因了,还是需要解决方案的,在php手册里找到了此函数的写法,于是摘抄下来,方便以后查看: <?php if (!function_exists('get

黑马程序员---工具类---OC自定义函数---计算当前路径下所有文件的总行数

------iOS培训.Java培训.Android培训, iOS学习型技术博客,期待与您交流------ 计算当前路径下所有文件的总行数 /* 计算当前路径下所有文件的总行数 涉及到NSArray.NSString.NSFileManager */ // 计算当前全路径(文件\文件夹)下所有文件的行数 // 接收参数path:文件的全路径(文件.文件夹) NSUInteger codeLinesCount(NSString *path) { // 1.获得文件管理者    单例模式:整个程序的

关于sprintf函数不同环境下的执行结果

作者:iamlaosong 今天发现sprintf函数的一个问题,不同环境下同样语句执行结果是不一样的.一个时间字符串,要求是6位,不足6位时前面补0,用下面语句实现: strcpy(tt,"2345"); printf("==%s==",tt); sprintf(t1,"%06s",tt); printf("==%s==",t1); 上述语句VC的执行结果:==2345====002345== 同样语句Linux下执行结果: