vtable相关内容

不能因为类不是多态而沮丧?

是否可以在没有虚拟方法的情况下进行继承?编译器说下面的代码不是多态的. 例子: A 类 {上市:诠释一个;int getA(){返回一个;};}B类:公共A {上市:诠释 b;int getB(){返回 b;};} 在另一个类中,我们试图从 A 对象向下转换为 B 对象: A *a = ...;B *b = dynamic_cast(a) 但这会产生以下编译时错误: 不 ..
发布时间:2022-01-24 16:07:40 C/C++开发

虚函数和vtable是如何实现的?

我们都知道 C++ 中的虚函数是什么,但它们是如何深入实现的呢? 可以在运行时修改甚至直接访问vtable吗? vtable 是否适用于所有类,还是仅适用于至少具有一个虚函数的类? 抽象类是否只是简单地为至少一个条目的函数指针设置了一个 NULL 值? 只有一个虚函数会减慢整个班级的速度吗?还是只调用虚拟函数?如果虚函数实际上被覆盖,速度是否会受到影响,或者只要它是虚函数就 ..
发布时间:2022-01-24 15:46:33 C/C++开发

Delphi 中的 COM 方法偏移量

在Delphi 中,如何找出COM 方法的地址?我可以硬编码偏移量 //0是QueryInterface方法的偏移量p := TPonterArray(指针(SomeInterface)^)[0]; 但我更喜欢使用符号名称.以下显然不起作用: var M : TMethod;...M := TMethod(SomeInterface.QueryInterface); 谢谢! 解决方案 ..
发布时间:2022-01-14 12:21:09 其他开发

COM 对象函数上的 API 挂钩?

问候 StackOverflowians, 正如此处所发现的,Windows 7 存在一个错误,在该错误中,Windows Explorer 实例不会触发 DISPID_BEFORENAVIGATE2 事件.此事件允许在导航即将发生时通知 shell 扩展,并且(对我来说最重要的是)有机会取消导航.很长一段时间以来,我一直在寻找一种解决方法,我想我找到了.但是,我想了解一下它的安全性. ..
发布时间:2022-01-14 12:07:10 C/C++开发

未定义对 vtable 的引用... Q_OBJECT 宏

当我取消注释信号槽所需的 Q_OBJECT 宏时,我得到一个未定义的对 MyApp 错误的 vtable 的引用,但没有宏它可以完美编译,但没有它我不能使用信号和槽.我想我可能做错了一些愚蠢的事情,但请尝试帮助,因为我真的找不到问题.O,我知道我的代码不整洁,并且正在处理它. myapp.h: #ifndef MYAPP_H#define MYAPP_H#include ..
发布时间:2022-01-11 20:19:48 C/C++开发

未定义对 'vtable for xxx' 的引用

takeaway.o:在函数“takeaway"中:项目:145:未定义对“外卖 vtable"的引用项目:145:未定义对“外卖 vtable"的引用takeaway.o:在函数“~takeaway"中:项目:151:未定义对“外卖 vtable"的引用项目:151:未定义对“外卖 vtable"的引用takeaway.o:在函数“gameCore"中:project.h:109: 未定义对 ` ..
发布时间:2022-01-11 15:48:26 C/C++开发

java接口内部是如何实现的?(虚拟表?)

C++ 具有多重继承.在程序集级别实现多重继承可能相当复杂,但网上有很好的描述这通常是如何完成的(虚拟表、指针修复、thunk 等). Java 没有多重实现继承,但它有多重接口继承,所以我不认为每个类只有一个 vtable 的直接实现可以实现这一点.java内部是如何实现接口的? 我意识到与 C++ 不同,Java 是由 Jit 编译的,因此不同的代码片段可能会以不同的方式进行优化, ..
发布时间:2021-12-31 14:28:48 Java开发

不能因为类不是多态而沮丧吗?

是否可以在没有虚方法的情况下进行继承?编译器说下面的代码不是多态的. 示例: class A {上市:一个;int getA(){return a;};}B类:公共A{上市:国际b;int getB(){return b;};} 在另一个类中,我们试图从 A 对象向下转换为 B 对象: A *a = ...;B *b = dynamic_cast(a) 但这会导致以下编译时错误: ..
发布时间:2021-12-17 19:32:21 C/C++开发

C++ 对 vtable 和继承的未定义引用

文件 A.h #ifndef A_H_#define A_H_A类{上市:虚拟 ~A();虚空 doWork();};#万一 文件 Child.h #ifndef CHILD_H_#define CHILD_H_#include "A.h"类孩子:公共 A {私人的:整数 x,y;上市:孩子();~孩子();void doWork();};#万一 和 Child.cpp #include ..
发布时间:2021-12-17 19:23:42 C/C++开发

C中的动态方法调度

我知道这听起来很傻,而且我知道 C 不是面向对象的语言. 但是有没有什么办法可以在 C 中实现动态方法分派?我想过函数指针,但没有完全理解. 我该如何实施? 解决方案 正如其他人所指出的,在 C 中当然可以实现这一点.它不仅是可能的,而且是一种相当普遍的机制.最常用的例子可能是 UNIX 中的文件描述符接口.对文件描述符的 read() 调用将分派到特定于提供该文件描述符的设备 ..
发布时间:2021-12-12 08:25:07 其他开发

对象如何在程序集级别在 x86 中工作?

我试图了解对象在程序集级别是如何工作的.对象究竟是如何存储在内存中的,成员函数如何访问它们? (编者注:原始版本方式太宽泛了,并且首先对汇编和结构的工作方式有些困惑.) 解决方案 类的存储方式与结构完全相同,除非它们具有虚拟成员.在这种情况下,有一个隐式 vtable 指针作为第一个成员(见下文). 结构体存储为连续的内存块(如果编译器没有对其进行优化或将成员值保留在寄存器中) ..
发布时间:2021-12-11 19:24:27 C/C++开发

为什么虚函数不能使用返回类型推导?

n3797 说: 第 7.1.6.4/14 节: 使用占位符类型的返回类型声明的函数不得是虚拟的 (10.3). 因此以下程序格式错误: struct s{虚拟汽车 foo(){}}; 我所能找到的理由是来自 n3638: 虚拟 允许虚拟的返回类型推导是可能的函数,但这会使覆盖检查和 vtable 复杂化布局,因此似乎最好禁止这样做. 谁能提供进一步的理由或 ..
发布时间:2021-11-30 18:16:03 C/C++开发

链接错误缺少 vtable

我正在定义一个类“函数"和另外两个继承自“函数"的类“多项式"和“仿射". 类函数 {民众:功能(){};虚函数* clone()const=0;虚拟浮点运算符()(float x)const=0;//通过函数给出一个数字的图像虚函数*导数()const=0;虚拟浮点逆(浮点 y)const=0;虚拟 ~function(){}};类多项式:公共函数{受保护:国际学位;私人的:浮动*系数;民众 ..
发布时间:2021-09-30 20:34:43 移动开发