前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >为什么虚函数在编译期间无法确定下来

为什么虚函数在编译期间无法确定下来

作者头像
ClearSeve
发布于 2022-02-11 00:38:10
发布于 2022-02-11 00:38:10
42100
代码可运行
举报
文章被收录于专栏:ClearSeveClearSeve
运行总次数:0
代码可运行

问题

为什么虚函数在编译期间无法确定下来?

回答

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct Base
{
  virtual void func()
  { std::cout << "Base::func()" << std::endl; }
};

struct Derived : Base
{
  virtual void func()
  { std::cout << "Derived::func()" << std::endl; }
};

int main()
{
  Base *bp = 0;

  std::string input;
  std::cin >> input;

  if (input == "base")
    bp = new Base;
  else
    bp = new Derived;

  /* The compiler cannot decide which
     function is called here: */
  bp->func();

  return 0;
}

看上面的代码就很容易知道,编译器无法在编译期判断 bp->func() 调用的是 Base::func() 还是 Derived::func(),所以虚函数在编译期间是无法确定下来的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
多态实现-虚函数、函数指针以及变体
作为一名C++面试官,问的最多的问题就是说说多态的实现机制,无非想听到的答案就是虚函数以及虚函数表,也算是烂大街的问题了,稍微有点经验的候选人都会答上个一二三。今天,借助本文,我们聊聊实现多态的几个方式。
高性能架构探索
2022/08/25
9740
多态实现-虚函数、函数指针以及变体
C++ Virtual And Pure Virtual Explained
---- Virtual Virtual Function是成员函数,其行为在派生类中被覆盖。与非虚函数不同的是,即使没有关于类的实际类型的编译时信息,也会保留重写的行为。如果派生类使用指针或者对基类的引用进行处理,则对被覆盖的虚函数的调用将调用派生类中定义的行为。 #include <iostream> struct Base { virtual void f() { std::cout << "base\n"; } }; struct Derived : Base {
吕海峰
2018/04/03
9730
从零开始学C++之虚函数与多态(一):虚函数表指针、虚析构函数、object slicing与虚函数、C++对象模型图
s1mba
2017/12/28
1.2K0
从零开始学C++之虚函数与多态(一):虚函数表指针、虚析构函数、object slicing与虚函数、C++对象模型图
深入了解C++虚函数
虚函数(Virtual Function):在基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数。 作用: C++ “虚函数”的存在是为了实现面向对象中的“多态”,即父类类别的指针(或者引用)指向其子类的实例,然后通过父类的指针(或者引用)调用实际子类的成员函数。通过动态赋值,实现调用不同的子类的成员函数(动态绑定)。正是因为这种机制,把析构函数声明为“虚函数”可以防止内存泄露。
Sky_Mao
2020/07/24
6500
深入了解C++虚函数
深入浅出C++虚函数的vptr与vtable
为了实现虚函数,C ++使用一种称为虚拟表的特殊形式的后期绑定。该虚拟表是用于解决在动态/后期绑定方式的函数调用函数的查找表。虚拟表有时会使用其他名称,例如“vtable”,“虚函数表”,“虚方法表”或“调度表”。
公众号guangcity
2019/09/20
4.4K0
深入浅出C++虚函数的vptr与vtable
【C++面向对象——类的多态性与虚函数】编写教学游戏:认识动物(头歌实践教学平台习题)【合集】
三个派生类Dog Frog Bird 分别 public继承 Animal,每个派生类会重新定义自己的move()和shout()
Rossy Yan
2024/12/24
1240
【C++面向对象——类的多态性与虚函数】编写教学游戏:认识动物(头歌实践教学平台习题)【合集】
解锁C++多态的魔力:灵活与高效的编码艺术(上)
多态性是面向对象编程的重要特性之一,而C++通过虚函数、继承等机制实现了这一强大的功能。多态性使得代码更加灵活和可扩展,允许不同类型的对象以统一的方式进行操作。在本篇文章中,我们将深入探讨C++中多态的实现原理、使用场景及其优劣势,并通过具体代码示例展示如何利用多态来提升代码的可维护性和复用性。
suye
2024/10/18
1720
解锁C++多态的魔力:灵活与高效的编码艺术(上)
虚函数——从一个bug谈起
在面向对象编程中,尤其是在C++中,虚函数是实现多态性的核心机制之一。虚函数通过允许在运行时决定调用哪个版本的函数,使得不同类型的对象能够对相同的函数调用做出不同的响应。
程序员的园
2024/12/05
1180
虚函数——从一个bug谈起
【C++ 多态】—— 礼器九鼎,釉下乾坤,多态中的 “风水寻龙诀“
同样有关运算符重载的知识这里也不再过多讲解,在类和对象中已经讲的很详细了,忘了就快去复习一下吧!! 👉 C++ 类和对象 进阶篇
换一颗红豆
2025/04/01
380
【C++ 多态】—— 礼器九鼎,釉下乾坤,多态中的 “风水寻龙诀“
60秒问答:多态和函数重载的关系?
运行时的多态:通过类继承和虚函数实现的(根据虚表指针 指向 派生类的函数,还是基类的函数)
早起的鸟儿有虫吃
2021/07/22
1.5K0
深入探索虚函数表(详细)
这篇博客可能有一点点长,代码也有一点点多,但是仔细阅读分析完,会对虚函数表有一个深刻的认识。
Ch_Zaqdt
2020/03/13
1.3K0
深入探索虚函数表(详细)
C++函数、虚函数和函数对象:从基础到应用
在C++编程中,函数、虚函数和函数对象是三个重要的概念。它们在程序设计中扮演着不同的角色,理解它们的区别和应用场景对于编写高效、灵活的代码至关重要。本文将详细探讨这三者的定义、特点、使用场景以及更进一步的引申,并通过实例帮助读者更好地理解这些概念。
码事漫谈
2024/12/27
1710
C++函数、虚函数和函数对象:从基础到应用
【c++】全面理解C++多态:虚函数表深度剖析与实践应用
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价
用户11029103
2024/05/24
3430
C++进阶:详解多态(多态、虚函数、抽象类以及虚函数原理详解)
注意:在重写基类虚函数时,派生类的虚函数在不加virtual关键字时,虽然也可以构成重写(因为继承后基类的虚函数被继承后在派生类依旧保持虚函数属性)但是该种写法不规范,大家还是少用为好。
是Nero哦
2024/03/17
6000
C++进阶:详解多态(多态、虚函数、抽象类以及虚函数原理详解)
C++多态的两种形式
多态(Polymorphisn)是面向对象程序设计(OOP)的一个重要特征。多态字面意思为多种状态。在面向对象语言中,一个接口,多种实现即为多态。C++中的多态性具体体现在编译和运行两个阶段。编译时多态是静态多态,在编译时就可以确定使用的接口。运行时多态是动态多态,具体引用的接口在运行时才能确定。
恋喵大鲤鱼
2018/09/27
4.1K1
C++多态的两种形式
C++纯虚函数与抽象类
为什么说虚函数是C++最重要的特性之一呢,因为虚函数承载着C++中动态联编的作用,也即多态,可以让程序在运行时选择合适的成员函数。虚函数必须是类的非静态成员函数(且非构造函数),其访问权限是public。那么: (1)为什么类的静态成员函数不能为虚函数? 如果定义为虚函数,那么它就是动态绑定的,也就是在派生类中可以被覆盖的,这与静态成员函数的定义(在内存中只有一份拷贝,通过类名或对象引用访问静态成员)本身就是相矛盾的。
恋喵大鲤鱼
2018/09/27
1.5K0
【c++】多态&&虚函数&&抽象类&&继承中的虚函数表详解
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态
用户10925563
2024/06/04
3900
【c++】多态&&虚函数&&抽象类&&继承中的虚函数表详解
从零开始学C++之虚继承和虚函数对C++对象内存模型造成的影响(类/对象的大小)
首先重新回顾一下关于类/对象大小的计算原则: 类大小计算遵循结构体对齐原则 第一个数据成员放在offset为0的位置 其它成员对齐至min(sizeof(member),#pragma pack(n
s1mba
2017/12/28
1.1K0
从零开始学C++之虚继承和虚函数对C++对象内存模型造成的影响(类/对象的大小)
虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?
根据给定的文章内容,撰写摘要总结。
s1mba
2017/12/28
1K0
虚析构函数? vptr?  指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?
探索C++三大特性--C++多态详解:从入门到深入
在C++中,多态(Polymorphism)是面向对象编程中的一个重要特性,允许不同的数据类型通过统一的接口进行处理。这种特性使得程序的可扩展性和可维护性大大提高。
用户11289931
2024/11/24
6660
推荐阅读
相关推荐
多态实现-虚函数、函数指针以及变体
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文