virtual-functions相关内容
为什么要(为了使其编译)中间的CloneImplementation和std::static_pointer_cast(请参见下面的 3 部分)对std::shared_ptr使用克隆模式,而不是使用更接近的内容(请参阅下面的 2 节)以使用原始指针(请参阅下面的 1 节)?因为据我了解,std::shared_ptr具有广义复制构造函数和广义赋值运算符? 1.带有原始指针的克隆模式:
..
虚拟函数的返回类型应该与基类或协变中的类型相同.但是为什么我们有这个限制? 解决方案 由于胡说八道: struct foo { virtual int get() const { return 0; } }; struct bar : foo { std::string get() const { return "this certainly isn't an in
..
using namespace std; #include #include class One{ private: virtual void func(){ cout
..
我正在尝试优化代码的运行时间,并被告知删除不必要的虚函数是解决之道.考虑到这一点,我仍然想使用继承来避免不必要的代码膨胀.我以为,如果我只是简单地重新定义了我想要的功能并初始化了不同的变量值,那么只要我需要派生类特定的行为,就可以将其向下转换到派生类中. 因此,我需要一个变量来标识要处理的类的类型,以便可以使用switch语句正确地向下转换.我正在使用以下代码来测试这种方法: Clas
..
在C ++ 17中考虑以下代码: #include #include struct base { base() {std::cout
..
我正在为容器类派生一个基类,以便可以维护一致的接口.当前看起来像这样: template class BaseClass { public: virtual Datatype Foo() = 0; virtual Datatype Bar() = 0; }; template class
..
据我了解,virtual函数指针表在对象中的位置取决于编译器. 将指针放在对象的开头还是结尾是否有任何利弊?反之亦然? 解决方案 虚拟函数表的存在仅依赖于编译器(但是所有编译器都依赖),并且也不要求位置...在所有编译器中我知道细节,vptr存储在对象的开头.原因是它提供了统一的位置.考虑一个类层次结构: struct base { T data; virtual vo
..
为什么会这样? http://coliru.stacked-crooked.com/a/e1376beff0c157a1 class Base{ private: virtual void do_run() = 0; public: void run(){ do_run(); } }; class A : public Base { publi
..
在我的工作场所(仅适用于php),我们有一个用于数据库抽象的基类.当您要将新的数据库表添加到基层时,必须创建该基类的子类,并重写一些方法来定义使用此表的单独行为.正常行为应保持不变. 现在,我在公司看到许多新的程序员,他们只是重写默认行为的方法.有些人是如此“好",可以放入所有默认行为,然后在自己喜欢的地方添加一些单独的东西,而另一些人则试图使用基类及其继承者而自杀. 我解决这个问题的
..
我了解什么是Java方法调用,并已使用该方法练习了许多示例. 我想知道这个概念的实际情况或需要. 如果任何人都可以给出使用它的真实场景并为之提供帮助,那将有很大的帮助. 如果没有这个概念,会发生什么? 解决方案 这里是一个示例.假设我们有2个类: class A { public String getName() { return "A"; }
..
是否有真正的理由不使成员函数在C ++中虚拟化?当然,总是有性能方面的争论,但这在大多数情况下似乎并不成立,因为虚拟函数的开销相当低. 另一方面,我被遗忘了几次却忘记了将一个虚拟的函数设为 是虚拟的.与性能相比,这似乎是一个更大的争论.因此,有什么理由不使成员函数默认为虚拟吗? 解决方案 一种阅读问题的方法是:“为什么C ++不会默认使每个函数都是虚拟的,除非程序员重写该默认值.
..
首先,我很抱歉是否还有其他帖子可以回答这个问题,我发现所有类似的帖子都涉及菱形继承方案或定义的函数,而事实并非如此. 简而言之,我想知道是否有可能让一个类从另外两个类继承而来,其中两个子类都具有一个具有相同名称和参数的函数,但它是在一个子类中定义的,并且在其他.此外,如果我能做到这一点,那么在对纯虚拟/抽象类进行调用的函数中,如果对派生类所做的更改很少,最终会在另一个子类上调用已定义的函数呢
..
我正在尝试做以前从未真正做过的事情.我基本上有3节课.类A是具有纯虚拟方法的抽象类,类B是一个单独的类,其中包含与类A中的虚拟方法同名的方法.我试图将类C中的所有内容捆绑在一起.继承C中的类B和A(多重继承),并使用类B中的方法实现类A中的方法.这种方式我创建了一种模块化方法.下面的示例是我的代码的非常简化的版本. class A { virtual int methodA() = 0; v
..
我正在阅读Bjarne的论文:在第370页的第3节中,Bjarne说:“编译器将成员函数的调用转换为带有“额外"参数的“普通"函数调用;“额外"参数是指向该对象的指针成员函数被调用." 我对这个论点感到困惑.请参见以下两个示例: 示例1 :(第372页) class A { int a; virtual void f(int); virtual void
..
可能重复: C ++:为什么需要new? 当对象是包含虚函数的类的子代时,为什么不能使用malloc为对象分配空间?这真令人沮丧.有充分的理由吗? 以下程序说明了该问题.它在第27行发生段错误,在这里我称为aa-> f() #include #include class A { public: virtual int f()
..
是否可以在Java中编写虚拟方法,就像在C ++中一样? 或者,是否有适当的Java方法您可以实现哪些产生类似的行为?我可以举几个例子吗? 解决方案 来自 wikipedia 在 Java 中,所有非静态方法是 默认“虚拟功能。”只有 方法标有关键字最终, 无法覆盖,以及 隐私方法,不是 继承,非虚拟。
..
我有一组自定义类Student对象。 CourseStudent和ResearchStudent都继承自Student,而Student的所有实例都是其中一个。 我有一个函数来遍历数组,确定子类型每个学生,然后调用它们的子类型特定成员函数。 问题是,因为这些函数没有重载,所以在Student中找不到它们,所以编译器大惊小怪。 如果我有一个指向学生的指针,有没有办法获得指向该学生子
..
假设我有一个带有虚函数的类和一个以不同方式实现虚函数的派生类。假设我还有一个用于存储派生类的基类向量。如何在不事先知道派生类是什么的情况下,在向量中执行派生类的虚函数?说明问题的最小代码: #include #include class Foo { public: virtual void do_stuff(void){ std :
..
在玩实现虚拟赋值运算符的过程中,我以一种有趣的行为结束了。它不是编译器故障,因为g ++ 4.1,4.3和VS 2005共享相同的行为。 基本上,虚拟运算符=的行为与任何其他虚拟函数的行为不同到实际执行的代码。 struct Base { virtual Base& f(Base const&){ std :: cout
..
以下摘录以前是在Borland C ++,MSVC和OpenWatcom下编译的: class aaa { virtual _fastcall 〜AAA(); }; class bbb:public aaa { }; 它不能在gcc / g ++下编译(MinGW 4.8.0)。错误: probz.cpp:7:7:错误:为'virtual bbb :
..