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
    我画了一张图:
     
     
  • 相关阅读:
    [Andriod]计时器实现-基于线程消息机制三种方式
    [Android]语音识别中出现的问题和经验
    [工具]SublimeText编辑器一些设置-C++编译运行
    [工具]SublimeText编辑器一些设置-JAVA编译运行
    [HTML5]网页代码编辑器
    [Jetty]基于Java Servlet的支持WebSocket的服务器
    [网络包抓取分析软件]Wireshark
    [网络包抓取分析软件]Fiddler
    [JAVA]在Eclipse中使用JUnit4进行单元测试-1
    [JAVA]在Eclipse中使用JUnit4进行单元测试-2
  • 原文地址:https://www.cnblogs.com/qiangua/p/3706683.html
Copyright © 2011-2022 走看看