函数覆盖与函数隐藏

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(使用前将#替换为@)

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

  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • 为什么基类必须有一个带有 0 个参数的构造函数?

    这不会编译 namespace Constructor0Args class Base public Base int x class Derived Base class Program static void Main string a
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12

随机推荐

  • 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