函数覆盖与函数隐藏

2023-11-05

// derive.cpp : 定义控制台应用程序的入口点。  
//  
#include "stdafx.h"  
#include <iostream>  
using namespace std;  
class base  
{  
public:  
    virtual void xfn(int i)  
    {  
        cout<<"base::xfn(int i)"<<endl;  
    }  
    virtual void yfn(float f)  
    {  
        cout <<"base::yfn(float f)"<<endl;  
    }  
    void zfn()  
    {  
        cout <<"base::zfn()"<<endl;  
    }  
    virtual void afn()  
    {  
        cout <<"base::afn()"<<endl;  
    }  
protected:  
private:  
};  
class derived:public base  
{  
public:  
        virtual void xfn(int i)  
       {  
           cout<<"derived::xfn(int i)"<<endl;  
       }  
       void yfn(int c)  
       {  
           cout <<"derived::yfn(int c)"<<endl;  
       }  
       void zfn()  
       {  
           cout <<"derived::zfn()"<<endl;  
       }  
       void fn()  
       {  
           cout << "derived::fn()"<<endl;  
       }  
protected:  
private:  
};  
int _tmain(int argc, _TCHAR* argv[])  
{  
    derived d;  
    base *pb = &d;  
    derived *pd = &d;  
/*基类与子类函数名、参数一样,且都为虚函数则形成覆盖,虚函数的覆盖产生多态。 
    基类与子类函数名一样,参数与虚函数只要不符合上面规则就属于隐藏。 
*/ 
    //一般来说,基类指针调用基类函数,之类指针调用子类函数,但多态情况除外:  
    pb->xfn(5);     //derived::xfn(int i),虚函数覆盖形成多态,调用子类函数。  
    pd->xfn(5);     //derived::xfn(int i)  
    pb->yfn(3.14f); //base::yfn(float f)  
    pd->yfn(3.14f); //derived::yfn(int c),虽然基类有Virtual,但与子类参数表不一样,所以这里  
                    //子类函数对基类函数形成隐藏。即便基类函数为float,也不能使用,因为子类看不到。  
    pb->zfn();      //base::zfn()  
    pd->zfn();      //derived::zfn(),函数、参数一样,但基类没有Virtual,还是会隐藏基类同名函数。  
    pb->afn();      //base::afn()  
    pd->afn();      //base::afn(),子类函数即没有覆盖也没隐藏,完全继承之基类。  
    //pb->fn();     //error:“fn”: 不是“base”的成员。  
    pd->fn();       //derived::fn()  
    cout<<endl<<endl;  
    base e;  
    base *pb1 = &e;  
    //derived *pd1 = &e;//error:不能用子类指针指向基类对象。  
    pb1->xfn(5);     //base::xfn(int i)  
    pb1->yfn(3.14f); //base::yfn(float f)  
    pb1->zfn();      //base::zfn()   
       
      
    return 0;  

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lz_26/archive/2009/07/16/4353450.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数覆盖与函数隐藏 的相关文章

随机推荐

  • linux下eclipse C++ 多线程调试

    初学linux编程 想要用linux下eclipse C 多线程调试 发现相关资料很少 所以想写一篇这样的文章 在这个页面看到 这里 If you use eclipse CDT you probably understand that e
  • 小信号先滤波还是先放大?

    1 是先滤波再放大 还是先放大再滤波 ADI 技术 电子技术论坛 广受欢迎的专业电子论坛 ADI亚洲技术支持中心的同事们给出的建议是 一般是先放大再滤波 这样经过放大器带来的噪声也可以被滤除 您怎么看 我觉得应该看是什么信号以及用什么样的运
  • Quartz 建表语句SQL文件

    Quartz 通过配置初始化数据库 https blog csdn net weixin 44371237 article details 133278217 官网找SQL SQL文件在jar里面 github下载 https github
  • SecureCRT MAC版本的单词跳转

    20210201 引言 最近更换了笔记本 第一次用mac 使用起来还是跟windows有很多不同 之前也已经安装了很多我在windows下的软件 例如securecrt 这个是我一直使用的终端软件 可能很多人在mac下都是使用iterm2
  • Linux系统意外断电无法启动解决方案

    首先看提示哪个盘有问题 如 sda2 fsck y dev sda2 修复完成后键入 reboot 重启电脑后修复OK
  • Gradle SNAPSHOT 版本更新

    转自 https www cnblogs com scoftlin p 9809623 html 在引用Maven 库上的aar 时经常会出现我们更新依赖的库时 Studio 并不能及时将最新的依赖库拉下来 这个因为gradle为了加快构建
  • [机器学习与scikit-learn-46]:特征工程-特征选择(降维)-2-常见的特征降维的方法大全

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123953894 目录 前言 第1章
  • 服务器安装系统如何收费,服务器系统安装费用

    服务器系统安装费用 内容精选 换一换 根据是否支持高级的SCSI命令来划分磁盘模式 分为VBD 虚拟块存储设备 Virtual Block Device 类型和SCSI 小型计算机系统接口 Small Computer System Int
  • 不使用binlog,canal,kafka等,只用java+mybatis拦截器来实现项目中的异步双写主从数据库,代码逻辑全整理

    项目中因为要迁库 所以我要在原项目中接入我的双写逻辑 确保新旧两个库都有数据写入 假如新库写入失败 旧库数据也能写入 这就确保了重要数据不能丢失 一开始考虑的方案是使用数据同步工具 像是canal或是DTS等 但是环境这块卡的比较死 没有其
  • CSS3 opacity 属性设置 div 元素的不透明级别:

    div 本元素的不透明度是 0 5 请注意 文本和背景色都受到不透明级别的影响 div
  • for循环各部分的执行顺序

    最近在考虑for循环第三个参数是 i or i 如果清楚了for循环各部分的执行顺序的话 其实这个问题无关紧要 因为第三个参数的变化是留给第二个判断语句判断的 所以 i or i 的结果都是增一 判断结果一样 for循环的执行顺序是 初始化
  • vue项目中使用echarts做词云图

    效果图 安装依赖 npm install echarts npm i echarts wordcloud 完整代码
  • Android国际化多语言切换

    关于App国际化 之前有讲到国际化资源 字符换 布局相关 想要了解的猛戳用力抱一下APP国际化 借着本次重构多语言想跟大家聊一下多语言切换 多语言切换对于一款国际化App来讲是重中之重 并非难事 但是若要做好也是一件不容易的事情 问题 An
  • react 中的计算属性 useMemo

    介绍 本篇文章主要是讲解以下 useMemo的正确用法 你们没有看错 useMemo的出现使得react也有了 计算属性 为什么要使用计算属性 其实主要优势就是性能好 通过下面例子可以看出 比较计算属性与普通函数 使用函数完成计算功能 im
  • MySQL安装详细教程!!!

    安装之前 先卸载你之前安装过的数据库程序 否则会造成端口号占用的情况 1 首先下载MySQL MySQL Download MySQL Community Server 下载路径 2 下载版本不一样 安装方法略有不同 版本5的安装基本一致
  • 手欠,给DELL R720加硬盘

    公司有一台比较旧的dell R720服务器 只上了一块15K 300G的硬盘 阵列卡H310M 让采购买了一块4T sata硬盘 因为原来系统上有重要数据 一直没敢动 昨天晚上一狠心直接插上了 什么也不用设置 直接进系统提示发现新硬盘 格式
  • springboot默认日志log,控制台不打印mybatis sql执行日志解决办法

    增加配置 logging level com XXX mapper debug
  • 5.模型训练

    参考PyTorch深度学习快速入门教程 绝对通俗易懂 小土堆 P25 33 现有网络模型的使用及修改 官方文档 以VGG16为例 pretrained True时是已经在ImageNet数据集上训练好的 需要先安装scipy库才能使用Ima
  • 官方 gpt3.5, gpt4.0、github copilot chat、gpt3.5 api、gpt4 api 对比

    这是 进击的Coder 的第 848 篇技术分享 作者 刘志军 来源 Python 之禅 阅读本文大概需要 9 分钟 gpt4 的智能程度大于 gpt3 5 毫无争议 但是 OpenAI 提供的 GPT3 5 API 能力是否和官方的 GP
  • 函数覆盖与函数隐藏

    derive cpp 定义控制台应用程序的入口点 include stdafx h include