我有一些代码看起来像这样: 整个代码太大(而且是机密),无法在此处发布,但这段代码总结得很好。 本质上,我有一个基类 class 和一些派生类。 我还有一个管理器,它使用指向该基数 class 的(智能)指针。 以及一个返回适当 Derived object 的工厂方法(尽管签名返回一个Base* ...
我有一些代码看起来像这样: 整个代码太大(而且是机密),无法在此处发布,但这段代码总结得很好。 本质上,我有一个基类 class 和一些派生类。 我还有一个管理器,它使用指向该基数 class 的(智能)指针。 以及一个返回适当 Derived object 的工厂方法(尽管签名返回一个Base* ...
学习后: 为什么涉及虚拟继承时不能使用static_cast进行向下转换? 我期待下面的代码给我的结果表明 static_cast 是错误的,而 dynamic_cast 是正确的。 但是,gcc 8/9 给了我以下 reuslt,显示静态转换和动态转换都是正确的: 那么这里涉及的魔法是什 ...
我有一个通过虚拟继承解决的 C++ 中的菱形继承方案。 基类general有两个属性和一些使用它们的方法。 specialrestriction限制是具有两个属性相等的特殊限制的general 。 特殊规则用特殊规则稍微修改了specialrule somemethod() 。 最后 ...
TArrayInt 是 TArray 的子对象,为什么我不能在多态函数中返回它? ...
我正在尝试在 C++ 中练习 OOP,但我遇到了有关覆盖函数的问题。 在我的 Shape2D 和 Shape3D 类中,我有在 Square 和 Sphere 类(分别为 ShowArea() 和 ShowVolume())中重新定义的虚函数。 但是,当我重新定义 function 并尝试运行 ma ...
我正在使用 C++11。我正在尝试声明 2 个接口:B 和 C,每个接口都声明了一些要由子类实现的函数。 这两个接口都依赖于在公共 A class 中声明的变量和函数。即使这种相对简单的结构也会导致钻石继承问题。( https://www.PCPC.me/what-is-diamond-proble ...
使用虚拟 inheritance 的示例 理想情况下,A1::n 是“abc”,A2::n 是“ttt”。 但它们都是空的。 整个过程中只调用一次 AA()。 我做错了什么? ...
我想知道菱形虚拟 inheritance 上 C++ 中成员变量和 vtable 指针的顺序。 考虑下面的 inheritance: 我想知道 class Derived3 的memory布局。 我在网上查看了以下链接: c++ 数据 alignment /会员订单 & inherita ...
我正在学习 C++,在学习虚拟继承时,我遇到了以下疑问: 在线cout << dA::x; 它打印 5。这个调用不应该是模棱两可的,如果不是为什么它会打印 5? ...
我有一个 class Base ,它有一个参数化的构造函数和两个类Middle1和Middle2 ,它们实际上继承自Base (为了解决菱形问题)。 另外, class Foo继承自Middle1和Middle2 。 Foo 现在显式调用 Base 构造函数并传递参数。 但是,代码无法编译,因为 ...
我必须使用一个 object 工厂来创建几种类型的新对象,每个对象都派生自多态基 class。每个 object 的类型是事先已知的,但是工厂返回基 class 上的指针。所以在构建之后我需要将该指针向下转换为特定 object class 的类型。在大多数情况下, static_cast可以完美地 ...
我有以下课程:class ServoPart { protected: virtual void doJob(byte* job) = 0; private: bool moving; Servo servo; }; // the following classes o ...
我在一个层次结构中有 3 个类(称为 A、B 和 C),其中 B 扩展 A,C 扩展 B。Class A 有一个带有单个参数的构造函数。 C 的定义要求调用 A 的构造函数,所以我试图通过在 B 中创建构造函数来做到这一点。但是,编译器告诉我 C 的构造函数必须同时初始化 A 和 B。这对我来说 ...
在 C++ 引物第 5 版上。 第18章多和虚拟inheritance,我有这个问题: 练习 18.30:在 Base 中定义一个默认构造函数、一个复制构造函数和一个具有 int 参数的构造函数。 在每个派生的 class 中定义相同的三个构造函数。 每个构造函数都应该使用它的参数来初始化它的 B ...
这是我的理解: During virtual inheritance :virtual base{} derived class along with inherited data members have to keep vpointer(to keep track of members of ...
抱歉描述不佳。 这是问题: 由于“'Bar”而失败:由于以下成员,无法实例化抽象 class:'int PureVirtualBase::IntFn(void) is abstract" 我不确定如何纠正这个问题。 我会认为 Bar 很好,因为它继承了 Foo 的 IntFn 实现(并根据 Pure ...
在我正在处理的一个项目中,我们正在使用一种模式,其中我们有定义接口的纯抽象类,以及可以使用不同模板参数实例化的模板实现,这些模板参数用于许多事情,包括依赖注入。 就像是: 我想问题零是这是否是已知/常见/正式模式,如果是,它的名称是什么? 通常出现的需求是扩展Base接口,例如Inherited ...
print()在调用get()时尝试访问this是因为vfptr查找吗? 换句话说,这不可能吗? 编辑:我知道我可以使用new或通过取消引用指针来创建一个新的mask_t 。 然后定义mask_t::this 。 我不想创建实例的原因是出于性能问题[这在我承认的示例中不可见]。 如果您想回答,请 ...
考虑以下程序: 让 D1 实际上继承自 B 允许我从 D2 的构造函数调用 B 的构造函数,跳过 class D1。 除了钻石继承问题之外,虚拟 inheritance 的这种使用是否会导致未定义的行为或其他危害? 除了解决钻石inheritance问题外,我从未见过使用虚拟inheritance。 ...
I am using a virtual inheritance to create a class EditablePrimeNumberSet (a set of prime numbers) that inherits the class EditableNumberSet (a set o ...