C++中重写与覆写(虚函数virtual)的区别

2023-05-16

            
本文章已收录于:
            

  1. 虚函数的情况下调用成员函数时调用的是指向对象的所属类的成员函数例子中为apple
class fruit
{
public:
void func()
{
printf("fruit\n");
}
virtual void vfunc()
{
printf("v fruit\n");
}
};
class apple:public fruit
{
public:
void func()
{
printf("apple\n");
}
void vfunc()
{
printf("v apple\n");
}
};
int main(int argc, char* argv[])
{
fruit* f = new apple(); //注意 f是父类指针
f->func();
f->vfunc();
return 0;
}
结果是:
fruit
v apple
例子中func采用了函数覆盖
vfunc采用了虚函数(函数重写)
当fruit类的指针指向一个apple类的对象时,func调用了父类的函数,vfunc调用了子类的函数。
如过是函数覆盖,调用成员函数时,直接调用对象指针所属类的成员函数,例子中为fruit

虚函数的情况下,调用成员函数时,调用的是指向对象的所属类的成员函数,例子中为apple

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

C++中重写与覆写(虚函数virtual)的区别 的相关文章

  • 关于虚函数的成本

    如果我在循环中调用虚拟函数 1000 次 我会承受 1000 次还是仅一次的 vtable 查找开销 编译器也许能够优化它 例如 以下内容 至少在概念上 很容易优化 Foo f new Foo for int i 0 i lt 1000 i
  • 为什么多态性在没有指针/引用的情况下不起作用?

    我确实在 StackOverflow 上发现了一些具有类似标题的问题 但是当我阅读答案时 他们关注的是问题的不同部分 这些部分非常具体 例如 STL 容器 有人可以告诉我 为什么必须使用指针 引用来实现多态性吗 我可以理解指针可能会有所帮助
  • 在构造函数中调用纯虚函数会出现错误[重复]

    这个问题在这里已经有答案了 class a my base class public a foo virtual void foo 0 class b public a public void foo int main b obj ERRO
  • 虚拟基类和初始化列表[重复]

    这个问题在这里已经有答案了 可能的重复 gcc c 虚拟继承问题 Hi all 我想知道编译器在使用虚拟基类的多重继承时如何处理不同的初始化值 考虑一下臭名昭著的 恐惧钻石 继承计划 Base D1 D2 Join 为了避免有两份副本Bas
  • 具有 C++ 虚函数时的 GDB 不完整类型

    我刚刚注意到一些奇怪的事情 当我在类中添加 虚拟关键字 除构造函数之外的任何函数 时 我无法在 GDB 中显示对象的内容 GDB 说 不完整类型 这是代码 reco h ifndef RECO H define RECO H include
  • 你可以重写私有虚拟方法吗?

    我认为你可以 但我的同事认为你不能 你甚至不能declare私有虚拟方法 唯一有意义的时候是如果你有 public class Outer private virtual void Foo public class Nested Outer
  • 用于 Twain 开发的模拟或虚拟 Twain 源 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 为了开发基于 Web 的扫描解决方案 我很乐意在 Windows 或 Mac 上测试它 而无需实际将扫描仪连接到我的盒子上 那么是否有一个程序 工具可
  • 虚拟的概念

    我对 CPP 很陌生 正在学习后期绑定多态性 根据我所阅读和理解的内容 virtual 关键字用于后期绑定 它在编译时内部创建一个由 vptr 指向的 vtable 所以 例如 class BASE public virtual void
  • 虚函数的实现可以放在头文件中吗

    通常 如果我们将非虚拟成员函数的实现放入头文件中 该函数将被内联 如果我们将虚拟成员函数的实现放在头文件中怎么样 我想这与将其放入 cpp 文件中是一样的 因为内联和多态性不能一起工作 我的说法正确吗 将方法的实现放入头文件中并不会使其内联
  • C++虚函数被隐藏

    我在 C 继承方面遇到问题 我有一个类层次结构 class A public virtual void onFoo virtual void onFoo int i class B public A public virtual void
  • 将虚拟地址转换为物理地址

    The following page table is for a system with 16 bit virtual and physical addresses and with 4 096 byte pages The refere
  • 如何隐藏虚拟键盘

    我不想显示虚拟键盘 我尝试了下面的方法 但没有任何区别 InputMethodManager imm InputMethodManager getSystemService Context INPUT METHOD SERVICE imm
  • PHP 中 C++ 的虚函数相当于什么?

    Is it abstract function xxx 我刚刚做了一个测试 似乎表明私有方法也是虚拟的 class a private function test echo 1 class b extends a private funct
  • Meteor 如何处理多个虚拟主机?

    Meteor 如何处理多个虚拟主机 www Some Client Domain com gt www Our CName URL com gt Meteor 应用程序 我们需要 Meteor 应用程序来服务相同的站点 应用程序 但具有特定
  • 虚拟继承[重复]

    这个问题在这里已经有答案了 虚拟 继承是什么意思 我看到了下面的代码 没明白关键字的意思virtual在以下情况下 class A class B public virtual A 虚拟继承用于解决 DDD 问题 Dreadful Diam
  • 避免派生类 C++ 中的“纯虚函数调用”

    我对 C 相当陌生 所以如果这个问题的水平稍微低于这里的通常标准 我想道歉 我试图让几个类从具有虚拟函数定义的基类继承 然后我想创建一个 MainClass 数组 它可以包含所有派生类 以便输出派生 定义的虚拟功能 我收到错误 R6025
  • C++ 多重继承关闭同名运算符

    是否可以从两个不同的抽象类继承仅返回类型不同的同名运算符 如果是这样 他们 实现运算符的语法是什么 使用 解析运算符的语法是什么 与任何其他虚函数相同 一般情况下的开销是多少 如果您可以向我提供参考或示例代码 将会有所帮助 thanks 1
  • 在 XAMPP 上设置虚拟主机

    我已经在 Ubuntu 上的 opt lampp 目录中安装了 XAMPP 并且想要设置一些虚拟主机 Apache 虚拟主机教程说明放置
  • Delphi - 将物理路径(设备文件句柄)转换为虚拟路径

    我怎样才能转换像这样的路径 设备 HarddiskVolume3 Windows 进入其相应的虚拟路径 如本例中的 c Windows 我个人更喜欢原生方式 function GetHDDDevicesWithDOSPath TString
  • 如何破解虚拟表?

    我想知道如何更改地址Test它在虚拟表中HackedVTable void HackedVtable cout lt lt Hacked V Table lt lt endl class Base public virtual Test c

随机推荐

  • cpp之间函数引用和类引用的方法

    除了 include外 xff0c cpp文件之间怎么引用函数 file C h ifndef FOO H define FOO H extern void sayHello endif FOO H file B cpp include 3
  • 在C++中调用DLL中的函数

    1 dll 的优点 代码复用是提高软件开发效率的重要途径 一般而言 xff0c 只要某部分代码具有通用性 xff0c 就可将它构造成相对独立的功能模块并在之后的项目中重复使用 比较常见的例子是各种应用程序框架 xff0c ATL MFC 等
  • HC-SR04超级简单教程(快速入门)

    目录 一 模块介绍 xff08 个人理解 xff09 1 简单理解 2 该模块的参数 二 HC SR04的操作 三 代码 1 代码前的注意事项 2 关键代码 四 代码实战效果图 五 结束 一 模块介绍 xff08 个人理解 xff09 1
  • C++中对于类来说头文件(.h)和源文件(.cpp)都应该写些什么 (类的常规创建)

    头文件 h xff1a 写类的声明 xff08 包括类里面的成员和方法的声明 xff09 函数原型 define常数等 xff0c 但一般来说不写出具体的实现 在写头文件时需要注意 xff0c 在开头和结尾处必须按照如下样式加上预编译语句
  • c#的接口详解

    什么是接口 xff1f 其实 xff0c 接口简单理解就是一种约定 xff0c 使得实现接口的类或结构在形式上保持一致 个人觉得 xff0c 使用接口可以使程序更加清晰和条理化 xff0c 这就是接口的好处 xff0c 但并不是所有的编程语
  • C语言中的全局变量定义与使用

    1 书中对 全局变量 的定义 在函数内定义的变量是局部变量 xff0c 而在函数外定义的变量叫做外部变量 xff0c 外部变量是全局变量 全局变量可以为本文件中其他函数所共用它的有效范围从定义变量的位置开始到本源文件结束 建立全局变量的作用
  • C,C++,C#note

    1 c 43 43 中的类的定义和声明可以都写在头文件中 xff0c 然后cpp文件include头文件 xff1b 也可以声明在头文件 xff0c 定义在cpp文件 xff1b 或者所有声明和定义都放在cpp文件 xff1b 混写定义与声
  • 在C++中可以用3种方法访问一个字符串

    用字符数组存放一个字符串 例6 10 定义一个字符数组并初始化 xff0c 然后输出其中的字符串 ol class snippet num style margin top 0px margin bottom 0px margin left
  • 动态存储和静态存储区域区别

    动态存储方式 所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式 动态存储变量是在程序执行过程中 xff0c 使用它时才分配存储单元 xff0c 使用完毕立即释放 典型的例子是函数的形式参数 xff0c 在函数定义时并不
  • c++中默认32位int类型转换截取高位部分

    int类型的变量固定为4个字节 xff0c 共32位 int类型变量初始值一般为0 xff0c 范围 2 31 2 31 1 即 2147483648 xff0c 2147483647 16 位系统下 xff0c int 是 2 个字节 x
  • c#-接口

    c 中的接口中必须是未实现的方法 xff0c 例如属性 xff0c 事件 xff0c 索引器 xff0c 一般函数等 除此之外不能有其他的成员 xff0c 类可以继承两个或两个以上的接口 xff0c 派生类中必须实现接口中的所有方法
  • C# SerialPort 读写三菱FX系列PLC

    1 xff1a 串口初始化 com 61 new SerialPort 34 COM3 34 9600 Parity Even 7 StopBits One 2 xff1a 打开关闭串口 if com IsOpen com Close co
  • c++中用new和不用new创建对象的本质区别

    1 xff1a 作用域不同 不用new xff1a 作用域限制在定义类对象的方法中 xff0c 当方法结束时 xff0c 类对象也被系统释放了 xff0c xff08 安全不会造成内存系统泄漏 xff09 用new xff1a 创建的是指向
  • ubuntu系统通过ifconfig查看eth0只有ipv6没有ipv4的解决方案

    只有inet6 addr 配置eth0 3 重新启动sudo etc init d networking restart IP地址出来了 看起来就正常 4 看其他资料 xff0c linux 43 QT4 0 xff0c 在这个开发板上的l
  • Action<T> 无参数委托详解

    C 委托Action Action lt T gt Func lt T gt Predicate lt T gt CLR环境中给我们内置了几个常用委托Action Action lt T gt Func lt T gt Predicate
  • 在C++里,有两种方法创建对象:

    方法一 xff1a ClassName object param 这样就声明了一个ClassName类型的object对象 xff0c C 43 43 会为它分配足够的存放对象所有成员的存储空间 注意 xff1a 为节省存储空间 xff0c
  • C++中引用(&)的用法和应用实例

    对于习惯使用C进行开发的朋友们 xff0c 在看到c 43 43 中出现的 amp 符号 xff0c 可能会犯迷糊 xff0c 因为在C语言中这个符号表示了取地址符 xff0c 但是在C 43 43 中它却有着不同的用途 xff0c 掌握C
  • C++中重载与重写函数区别及虚函数(转载)

    C 43 43 中重载与重写函数区别及虚函数 C 43 43 中的虚函数 virtual function 1 简介 虚函数是C 43 43 中用于实现多态 polymorphism 的机制 核心理念就是通过基类访问派生类定义的函数 假设我
  • c#中的静态构造函数

    静态构造函数是C 的一个新特性 xff0c 其实好像很少用到 不过当我们想初始化一些静态变量的时候就需要用到它了 这个构造函数是属于类的 xff0c 而不是属于哪里实例的 xff0c 就是说这个构造函数只会被执行一次 也就是在创建第一个实例
  • C++中重写与覆写(虚函数virtual)的区别

    本文章已收录于 xff1a 虚函数的情况下调用成员函数时调用的是指向对象的所属类的成员函数例子中为apple class fruit public void func printf 34 fruit n 34 virtual void vf