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
..
当基类指针指向其派生类的对象时,如果函数被覆盖,我们使用虚函数来解决问题.这样我们就可以使用指针访问派生类自己的函数.像这样,我在想是否有一种方法可以应用于变量中的 virtual 关键字,以便我们可以使用指针访问派生类中变量的最新版本. #include 使用命名空间标准;班级基础{民众:int x;//但是如果我们在这里添加 virtual 关键字呢?//如果尝试这样做会出错.//但是你能告
..
在工作中,我遇到过基本上如下所示的代码: #include 使用命名空间标准;枚举 e_Specialization {专业化_A,专业化_B};模板类模板库{民众:字符串 foo() { 返回“TemplatedBase::foo";}};模板string TemplatedBase::foo() { return “
..
这里我在 Derived 类中声明了另一个虚函数. #include 使用命名空间标准;A类{字符串 s;民众:A(const string& name) : s(name){}虚拟无效 f1(){cout
..
我有多个父级的 C++ 类;每个父级都定义了一个具有通用名称但用途不同的函数: 类 BaseA{虚空 myFunc();//做一些任务};B类{虚空 myFunc();//做一些其他的任务};派生类:公共BaseA,公共BaseB; 如果是这样,我就没有问题 - 我可以用 using 语句解决歧义,我可以选择使用基类名称和范围解析运算符调用哪个. 不幸的是,派生类需要覆盖它们: cla
..
最近我执行了以下代码. #include 班级基地{民众:虚空函数(){std::cout
..
这可能是一个好点,但它涉及编译器发出的警告,如果您执行以下操作: A 类{公共虚拟无效 F() { }}B级:A{公共无效 F() { }} 然后你会收到警告: 'EomApp1.B.F()'隐藏继承的成员'EomApp1.A.F()'. 要使当前成员覆盖该实现,请添加 override 关键字.否则使用 new 关键字. 问题:如果我什么都不做,实际警告我会发生什么警告?如果我
..
如果使用 Visual Studio 2019,我使用两个具有相同名称但不同参数的虚拟方法编译此 C++ 代码: struct MyStruct{虚拟无效 foo(float) = 0;虚拟无效 foo(int) = 0;};类 MyClass : 公共 MyStruct{民众:void foo(float) {}void foo(int) {}};静态 MyClass c; 生成的类的 vt
..
我在 stl 容器(实际上是堆栈)中存储了一个具有公共父级的对象,但是在它内部的对象上调用虚拟函数会导致调用这个公共父级中的实现.查看演示代码: #include #include 使用命名空间标准;Z级{民众:虚空回声(){cout
..
在 Java、C# 和 D 等语言中,final 或 sealed 类保证是叶类(没有其他类继承自的类).这允许编译器对编译时类型为 final 或 sealed 的对象进行顶级 devirtualize 方法调用. C++ 没有 final 或 sealed 关键字.有没有什么方法可以模拟它在继承层次结构中作为叶子的类的去虚拟化的行为? 解决方案 C++11 确实有 final,虽
..
假设以下简单情况(注意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();//调
..
关键字 virtual 在覆盖方法时有什么作用?我没有使用它,一切正常. 每个编译器在这方面的行为都一样吗? 我应该使用它还是不使用它? 解决方案 没有它你不能重写成员函数. 您只能隐藏一个. struct Base {无效的 foo() {}};结构派生:基{无效的 foo() {}}; Derived::foo不会覆盖Base::foo;它只是隐藏它,因为它具有相
..
我有一组自定义类 Student 对象.CourseStudent 和 ResearchStudent 都继承自 Student,Student 的所有实例都是其中之一. 我有一个函数来遍历数组,确定每个学生的子类型,然后对它们调用特定于子类型的成员函数. 问题是,因为这些函数没有重载,所以在Student中找不到,所以编译器大惊小怪. 如果我有一个指向 Student 的指针,
..
来自 C++/Java/C# 背景,我期待在 Swift 中看到虚拟方法,但是阅读 swift 文档我没有提到虚拟方法. 我错过了什么? 由于浏览量很大,我决定为最新且非常清晰/详细的答案提供奖励. 解决方案 与 C++ 不同,Swift 中没有必要指定方法是虚拟的.编译器将确定要使用以下哪个: (性能指标当然取决于硬件) 内联方法:0 ns 静态调度:
..
我知道 PHP 或 Java 中的虚方法. 如何在 Python 中实现它们? 或者我必须在抽象类中定义一个空方法并覆盖它吗? 解决方案 当然,您甚至不必在基类中定义方法.在 Python 中方法比虚拟更好 - 它们是完全动态的,因为 Python 中的输入是鸭子输入. 类狗:定义(自我):打印“hau"类猫:定义(自我):打印“喵"宠物 = 狗()pet.say() # 打
..
我是自学的,因此对很多术语并不熟悉.我似乎无法通过谷歌搜索找到答案:什么是“虚拟"与“直接"调用虚拟函数? 这与术语有关,与技术无关.我问的是何时将呼叫定义为“直接"与“虚拟".它与 vtable 或与这些概念的实现有关的任何其他内容无关. 解决方案 你的问题的答案在不同的概念层次上是不同的. 在概念语言级别,非正式术语“虚拟调用"通常是指根据调用中使用的对象的动态类型解析的调
..
我们有一个这样的类: class LogAnalyzer{受保护的 IExtensionManager 管理器;公共日志分析器(){获取管理器();}protected virtual void GetManager(){manager = new FileExtensionManager();}} 然后我们派生出另一个这样的类: class TestableLogAnalyzer:LogA
..
我低于警告.我的部分代码是: class Base {上市:虚拟无效进程(int x){;};虚空进程(int a,float b){;};受保护:国际PD;浮动铅;};派生类:公共基础{上市:无效过程(int a,float b);}无效派生::进程(int a,浮点b){pd=a;pb=b;....} 我收到以下警告: 警告:重载的虚函数“Base::process"在“派生"类中仅部
..
我正在rhel7.6:ppc64le 上构建Istio-envoy.构建通过,但是有测试失败: 错误: 在 test/server/filter_chain_benchmark_test.cc:19:0:` 包含的文件中`bazel-out/ppc-fastbuild/bin/external/com_github_google_benchmark/_virtual_includes/be
..
我有一些 C++ 代码(由其他人编写)似乎调用了错误的函数.情况如下: UTF8InputStreamFromBuffer* cstream = foo();wstring fn = L"foo";文档阅读器*阅读器;如果(a_condition_true_for_some_files_false_for_others){reader = (DocumentReader*) _new GoodD
..