virtual-functions相关内容

多个基类可以有相同的虚方法吗?

A 类有一个纯虚方法 read() B 类有一个实现的虚方法 read() 我有一个继承A和B的C类 这会发生吗? 我想要实现的是两个基类 A 和 B 相互补充. 所以 C read() 方法实际上会调用类 B read() class A {虚拟 int get_data() = 0;无效打印(){日志(获取数据());}}B类{虚拟 int get_data() {返回 4 ..
发布时间:2021-09-18 18:47:25 C/C++开发

像,虚拟函数我们可以在 C++ 中使变量成为虚拟的吗?

当基类指针指向其派生类的对象时,如果函数被覆盖,我们使用虚函数来解决问题.这样我们就可以使用指针访问派生类自己的函数.像这样,我在想是否有一种方法可以应用于变量中的 virtual 关键字,以便我们可以使用指针访问派生类中变量的最新版本. #include 使用命名空间标准;班级基础{民众:int x;//但是如果我们在这里添加 virtual 关键字呢?//如果尝试这样做会出错.//但是你能告 ..
发布时间:2021-09-18 18:47:22 C/C++开发

覆盖合格的虚拟方法

我有多个父级的 C++ 类;每个父级都定义了一个具有通用名称但用途不同的函数: 类 BaseA{虚空 myFunc();//做一些任务};B类{虚空 myFunc();//做一些其他的任务};派生类:公共BaseA,公共BaseB; 如果是这样,我就没有问题 - 我可以用 using 语句解决歧义,我可以选择使用基类名称和范围解析运算符调用哪个. 不幸的是,派生类需要覆盖它们: cla ..
发布时间:2021-09-18 18:47:12 C/C++开发

如果我不注意“隐藏继承的成员"的警告怎么办.使当前成员覆盖该实现......"

这可能是一个好点,但它涉及编译器发出的警告,如果您执行以下操作: A 类{公共虚拟无效 F() { }}B级:A{公共无效 F() { }} 然后你会收到警告: 'EomApp1.B.F()'隐藏继承的成员'EomApp1.A.F()'. 要使当前成员覆盖该实现,请添加 override 关键字.否则使用 new 关键字. 问题:如果我什么都不做,实际警告我会发生什么警告?如果我 ..
发布时间:2021-09-18 18:47:06 C#/.NET

C++:去虚拟化叶子类

在 Java、C# 和 D 等语言中,final 或 sealed 类保证是叶类(没有其他类继承自的类).这允许编译器对编译时类型为 final 或 sealed 的对象进行顶级 devirtualize 方法调用. C++ 没有 final 或 sealed 关键字.有没有什么方法可以模拟它在继承层次结构中作为叶子的类的去虚拟化的行为? 解决方案 C++11 确实有 final,虽 ..
发布时间:2021-09-18 18:46:58 C/C++开发

C++:是“虚拟的"继承给所有后代

假设以下简单情况(注意virtual的位置) class A {虚空函数();};B类:公共A{空函数();};C类:公共B{空函数();}; 下面的调用会调用 B::func() 还是 C::func()? B* ptr_b = new C();ptr_b->func(); 解决方案 使用指针和引用的示例. 使用指针 B *pB = new C();pB->func();//调 ..
发布时间:2021-09-18 18:46:55 C/C++开发

覆盖方法时 virtual 关键字是什么意思?

关键字 virtual 在覆盖方法时有什么作用?我没有使用它,一切正常. 每个编译器在这方面的行为都一样吗? 我应该使用它还是不使用它? 解决方案 没有它你不能重写成员函数. 您只能隐藏一个. struct Base {无效的 foo() {}};结构派生:基{无效的 foo() {}}; Derived::foo不会覆盖Base::foo;它只是隐藏它,因为它具有相 ..
发布时间:2021-09-18 18:46:52 C/C++开发

从基类指针 C++ 访问子类成员

我有一组自定义类 Student 对象.CourseStudent 和 ResearchStudent 都继承自 Student,Student 的所有实例都是其中之一. 我有一个函数来遍历数组,确定每个学生的子类型,然后对它们调用特定于子类型的成员函数. 问题是,因为这些函数没有重载,所以在Student中找不到,所以编译器大惊小怪. 如果我有一个指向 Student 的指针, ..

Swift 有动态调度和虚方法吗?

来自 C++/Java/C# 背景,我期待在 Swift 中看到虚拟方法,但是阅读 swift 文档我没有提到虚拟方法. 我错过了什么? 由于浏览量很大,我决定为最新且非常清晰/详细的答案提供奖励. 解决方案 与 C++ 不同,Swift 中没有必要指定方法是虚拟的.编译器将确定要使用以下哪个: (性能指标当然取决于硬件) 内联方法:0 ns 静态调度: ..
发布时间:2021-09-18 18:46:45 移动开发

如何在 Python 中实现虚拟方法?

我知道 PHP 或 Java 中的虚方法. 如何在 Python 中实现它们? 或者我必须在抽象类中定义一个空方法并覆盖它吗? 解决方案 当然,您甚至不必在基类中定义方法.在 Python 中方法比虚拟更好 - 它们是完全动态的,因为 Python 中的输入是鸭子输入. 类狗:定义(自我):打印“hau"类猫:定义(自我):打印“喵"宠物 = 狗()pet.say() # 打 ..
发布时间:2021-09-18 18:46:42 Python

“直接"与“虚拟"调用虚函数

我是自学的,因此对很多术语并不熟悉.我似乎无法通过谷歌搜索找到答案:什么是“虚拟"与“直接"调用虚拟函数? 这与术语有关,与技术无关.我问的是何时将呼叫定义为“直接"与“虚拟".它与 vtable 或与这些概念的实现有关的任何其他内容无关. 解决方案 你的问题的答案在不同的概念层次上是不同的. 在概念语言级别,非正式术语“虚拟调用"通常是指根据调用中使用的对象的动态类型解析的调 ..
发布时间:2021-09-05 20:41:32 C/C++开发

警告:重载虚函数“Base::process"仅在类“派生"中部分覆盖

我低于警告.我的部分代码是: class Base {上市:虚拟无效进程(int x){;};虚空进程(int a,float b){;};受保护:国际PD;浮动铅;};派生类:公共基础{上市:无效过程(int a,float b);}无效派生::进程(int a,浮点b){pd=a;pb=b;....} 我收到以下警告: 警告:重载的虚函数“Base::process"在“派生"类中仅部 ..
发布时间:2021-06-13 19:41:12 C/C++开发