zoukankan      html  css  js  c++  java
  • 覆盖(重写)&隐藏

    成员函数被重载的特征
    (1)相同的范围(在同一个类中); 
    (2)函数名字相同; 
    (3)参数不同; 
    (4)virtual 关键字可有可无。 
    覆盖是指派生类函数覆盖基类函数,特征是
    (1)不同的范围(分别位于派生类与基类); 
    (2)函数名字相同; 
    (3)参数相同; 
    (4)基类函数必须有virtual 关键字。 
    “隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下
    (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。 
    (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆) 

    3种情况怎么执行:
    1。重载:看参数
    2。隐藏:用什么就调用什么
    3。覆盖:调用派生类
    ……
    覆盖(override)!覆盖指的是派生类的虚拟函数覆盖了基类的同名且参数相同的函数!
      在这里,我要强调的是,这种覆盖,要满足两个条件
     (a)有virtual关键字,在基类中函数声明的时候加上就可以了
     (b)基类CB中的函数和派生类CD中的函数要一模一样,什么叫一模一样,函数名,参数,返回类型三个条件
    ……
    隐藏(hide):
    指的是派生类的成员函数隐藏了基类函数的成员函数.隐藏一词可以这么理解:在调用一个类的成员函数的时候,编译器会沿着类的继承链逐级的向上查找函数的定义,如果找到了那么就停止查找了,所以如果一个派生类和一个基类都有同一个同名(暂且不论参数是否相同)的函数,而编译器最终选择了在派生类中的函数,那么我们就说这个派生类的成员函数"隐藏"了基类的成员函数,也就是说它阻止了编译器继续向上查找函数的定义.
     
    以上摘自:http://www.cnblogs.com/txwsh1/archive/2008/06/28/1231751.html
    我画了一张图:
     
     
  • 相关阅读:
    php CURL 发送请求封装
    PHP AES加解密(兼容php5,php7)
    vscode jshint 报'import' is only available in ES6 (use 'esversion: 6'). (W119)错误
    vue-cli4 + TS构建新项目
    搭建vue项目
    分享一个自然语言汉语时间语义识别的工具类
    图像检索阶段性总结
    mysql常用操作
    javascript在页面head内动态插入style
    iScroll-5拉动刷新功能实现与iScroll-4上拉刷新的一点改进
  • 原文地址:https://www.cnblogs.com/qiangua/p/3706683.html
Copyright © 2011-2022 走看看