zoukankan      html  css  js  c++  java
  • C++函数的高级特性——小结

    相对于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 运算符的重载

  • 相关阅读:
    从HDFS下载文件到本地
    oracle jdbc jar包异常
    spring jdbctemplate 启动报错(oracle驱动bug)
    solr搜索异常
    jdbc 处理Clob
    Wavosaur音频编辑软件: 功能专业,体积超小(500KB)
    isa server 2004中找不到HTTP过滤选项。
    cisco pix logging facility含义
    IPSec基础-密钥交换和密钥保护
    cisco 831 使用 SDM
  • 原文地址:https://www.cnblogs.com/alwayswangzi/p/6505053.html
Copyright © 2011-2022 走看看