相对于C语言,C++增加了重载(overload)、内联(inline)、const和virtual四种新机制。

1 重载

只能靠参数列表而不能紧靠返回值类型的不同来区分重载函数。编译器根据参数列表为每个参数产生不同的内部标识符。由于编译后的名字不同,C++程序不能直接调用编译后的C函数。C++提供了一个C交换指示符extern “C”来解决这个问题,例如:

#ifdef __cplusplus
extern "C" {
#endif
#include "myheader.h"
...//其他C头文件
#ifdef __cplusplus
}
#endif

2 重载、覆盖与隐藏的区别

成员函数被重载的特征是:

  • 具有相同的作用域(即在同一个类定义中)
  • 函数名字相同
  • 参数类型、顺序或数目不同(包括const和非const参数)
  • virtual关键字可有可无

覆盖是派生类改写了基类的成员函数,其特征是

  • 不同的作用域(分别在基类和派生类中)
  • 函数名字相同
  • 参数列表完全相同
  • 基类函数必须是虚函数

隐藏是指派生类的成员函数遮蔽了与之同名的基类成员函数,具体规则如下:

  • 派生类的函数与基类的函数同名,但是参数列表有所差异,此时,无论有没有virtual关键字,基类的函数在派生类中会被隐藏(区别于重载)
  • 派生类的函数与基类的函数同名,参数列表也相同,但是基类函数没有virtual关键字,此时,基类的函数在派生类中会被隐藏(区别于覆盖)
  • 覆盖是一种特殊的隐藏

3 参数的默认值

参数默认值放在函数的声明中,不能放在定义体中。

4 运算符的重载

C++函数的高级特性——小结的更多相关文章

  1. C++复习11.函数的高级特性

    C++ 函数的高级特性 20131002 C++函数增加了重载(override), inline, const, virtual四种机制,重载和内联机制既可以用于全局函数,也可以用于类的成员函数.c ...

  2. 002-python函数、高级特性

    1.函数 1.1 定义函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回 自定义一个求绝对 ...

  3. Python序列函数、高级特性及高阶函数

    序列函数: enumerate: for循环时记录索引,逐个返回元组(i, item) sorted:返回新的有序列表 zip:压缩将多个序列的对应位置的元素组成元组 zip(*元组列表): 解压缩 ...

  4. python:函数的高级特性

    很多语言中,都允许把函数本身做为参数,传递给其它参数:即所谓的高阶函数.python中也有类似特性: 一.map/reduce.filter.sorted hadoop里的map-reduce思想在p ...

  5. C++函数的高级特性

    对比于 C 语言的函数,C++增加了重载(overloaded).内联(inline).const 和 virtual 四种新机制.其中重载和内联机制既可用于全局函数也可用于类的成员函数,const ...

  6. python函数高级特性

    掌握了Python的数据类型.语句.函数,基本可以编写出很多有用的程序了.但是Python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好.基于这一思想,我们来介绍python中 ...

  7. python高级特性和高阶函数

    python高级特性 1.集合的推导式 列表推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:[exp for item in collection if codition] if ...

  8. 02.Scala高级特性:第6节 高阶函数;第7节 隐式转换和隐式参数

    Scala高级特性 1.    课程目标 1.1.   目标一:深入理解高阶函数 1.2.   目标二:深入理解隐式转换 2.    高阶函数 2.1.   概念 Scala混合了面向对象和函数式的特 ...

  9. Python3学习(二)-递归函数、高级特性、切片

    ##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...

随机推荐

  1. 02--读书笔记之:C++ Primer (第4版)及习题

    推荐博客:http://www.cnblogs.com/xkfz007/archive/2012/08/15/2639381.html 第2章 数据和基本类型 1. 整型 2. 习题:左值和右值 3. ...

  2. (转)RabbitMQ学习之消息可靠性及特性

    http://blog.csdn.net/zhu_tianwei/article/details/53971296 下面主要从队列.消息发送.消息接收方面了解消息传递过的一些可靠性处理. 1.队列 消 ...

  3. AssemblyInfo.cs 文件信息

    using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices ...

  4. [SCOI2008]奖励关_状压动归_数学期望

    Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 20; dou ...

  5. JavaScript 原型 原型链

    一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object .Function 是 JS 自带的函数对象.下面举例说明 var o1 = ...

  6. position:fixed div如何居中

    div{position:fixed;margin:auto;left:0; right:0; top:0; bottom:0;width:200px; height:150px;}

  7. 2、深入学习基本结构——CNN

    这节课主要简单复习一下CNN 从图中例子,1.3共享参数,2.4共享. 要看明白以上参数. 后面就是举例了. 比如声音信号 下面是zero padding 下面是pooling 还可以有mass po ...

  8. HDU3236 Gift Hunting

    /* HDU3236 Gift Hunting http://acm.hdu.edu.cn/showproblem.php?pid=3236 dp 滚动数组 * * */ #include <c ...

  9. Eclipse中项目去除Js验证

    删除项目.project文件中的 <buildCommand>   <name>org.eclipse.wst.jsdt.core.javascriptValidator< ...

  10. 日志log配置理解

    实际生产中,每天都有大量的日志生成,单个文件(FileAppender)已经不能满足要求,RollingFileAppender继承了FileAppender,并提供了更多的功能: 每天生成一个日志文 ...