草庐IT

多重性

全部标签

c++ - 什么是多重虚拟继承?

classfoo:publicvirtualbar,publicvirtualkung{//implementationofthemethodoftheaboveinheritedclass};bar和kung类是一个抽象类,包含在foo类中实现的纯虚方法。这个有什么用? 最佳答案 在你的情况下,如果bar和kung是最派生的基类,只要bar和kung中没有方法冲突,你就会知道它,即编译器在模糊定义中的错误。有关此内容的更多信息,请访问c++常见问题解答:http://www.parashift.com/c++-faq-lite/m

c++ - 使用多重继承实现Entity-Component编程

我读过几篇关于实体组件编程风格的文章。常见的问题之一是如何表达组件之间的依赖关系,以及与同一实体相关的组件如何通信。在我看来,这个问题的一个简单解决方案是使每个依赖项成为其依赖项的虚拟基类。这样,当一个组件包含在一个实体中时(通过虚拟继承),所有依赖的组件都只包含一次。此外,组件所依赖的所有功能都将在其成员函数中可用。classC_RigidBody:publicvirtualC_Transform{publicvoidtick(floatdt);};classC_Explodes:publicvirtualC_Transform{publicvoidexplode();};class

c++ - 模板类实例化的多重继承以及对成员函数的访问

让我们看一下代码:templateclassS{public:voidadd(Cc){++cnt;}size_tsize()const{returncnt;}private:size_tcnt{};};structFoo1{};structFoo2{};structFoo3{};classZ:publicS,publicS,publicS{public:usingS::add;usingS::add;usingS::add;usingS::size;//(1)usingS::size;//(2)usingS::size;//(3)};用法是这样的:Zz;z.add(Foo1{});z.

c++ - 非抽象但无状态的类对于多重继承是否与纯抽象类一样安全?

在大多数书籍和文章中,进行多重继承的唯一“安全”(或者至少是唯一建议的)方法是使用纯抽象基类(您可以称为虚拟接口(interface))的虚拟继承。原因主要是为了避免菱形继承(钻石问题),在菱形继承(钻石问题)中,人们可能会为数据成员的值或非纯虚函数的实现状态造成歧义。纯抽象基类不会同时遭受(没有数据成员,没有非纯虚拟)和虚拟继承甚至解决了基类实际内存地址的歧义。但是给出这样的解释:如果歧义仅来自“状态”的形式(例如数据成员、静态函数变量),那么就不是无状态非抽象(甚至可能具有所有“最终”方法)类作为多继承层次结构中的基类是否同样安全?我遗漏了什么可能的问题?PS:如果答案是“如果没有

c++ - OpenGL 多重纹理 - glActiveTexture 为 NULL

我已经开始了一个新项目,我想在其中使用多纹理。我以前做过多重纹理,我的OpenGL版本支持在标题中我有:GLuintm_TerrainTexture[3];//heightmap,texturemapanddetailmapGLuintm_SkyboxTexture[5];//left,front,right,backandtoptexturesPFNGLMULTITEXCOORD2FARBPROCglMultiTexCoord2fARB;PFNGLACTIVETEXTUREARBPROCglActiveTexture;在我的构造函数中:glActiveTexture=(PFNGLAC

c++ - 多重指数实现

有人知道已实现的多重指数算法吗?我正在寻找给定vectorA的东西,B将使用那里的一些快速算法计算A[i]^B[i]的乘积。谢谢! 最佳答案 以下假定您的数据是float。如果您使用的是多精度整数,请指定您的要求。干净的数值方式当然是先取log。事实上,即使结果是有限的,部分产品也很容易下溢/溢出。惯用的对应C++程序是:#include#include#includedoublef(doublex,doubley){returny*std::log(x);}templatedoublemulti_exponentiation(Ia

c++ - 具有同名抽象和定义继承函数的多重继承

首先,如果有另一篇文章回答了这个问题,我深表歉意,我发现所有类似的文章都涉及菱形继承方案或定义的函数,而这不是。简而言之,我想知道是否有可能让一个类继承自另外两个类,其中两个子类都有一个具有相同名称和参数的函数,但它是在一个子类中定义的,并且是纯虚拟的其他。此外,如果我能做到这一点,调用纯虚拟/抽象类上的函数是否会最终调用另一个子类上定义的函数,而对派生类的更改最少?例子:classA{public:virtualvoidSet(intX)=0;};classB{public:virtualvoidSet(intX);};classAB:publicA,publicB{//otherm

c++ - 为什么这不提供多重定义错误?

我曾经为了方便而内联编写虚拟析构函数的定义,尽管它并不正确。今天我决定做一个小测试来了解会发生什么。虚拟.h#ifndefDUMMY_HEADER#defineDUMMY_HEADER#includeclassDummy{public:virtual~Dummy(){std::cout删除器.cpp#include"dummy.h"voiddeleteDummy(Dummy*dummy){deletedummy;}主要.cpp#include"dummy.h"voiddeleteDummy(Dummy*dummy);intmain(){Dummy*dummy=newDummyEx();

c++ - 用于迭代多重映射的某些元素的设计运算符++

我有以下类声明:classDictionnary{private:map>data;public:boolisPrime();classprime_iterator{private:map>::iteratorit;public:iterator(){}prime_iterator&operator++(){++it;while(it!=data.end()&&!isPrime(it->first)){++it;}returnit;}...};旨在为map>的主键提供迭代器.我不确定operator++是否得到很好的实现。首先,做it!=data.end()是个好设计吗?访问外部类?其

c++ - 在 C++ 中为具有多重继承派生类的 vtables 的基之一调用赋值运算符

好的,这会有点棘手。这是一个(简化的)代码:classA{virtual~A();//fields,noneofwhichhasanassignmentoperatororcopyconstructor};classB{virtual~B();//sameasA};classDerived:publicA,publicB{Derived();Derived(constB&b);//nofields};与Derived::Derived(constB&b)(即接受其中一个基础)如下Derived::Derived(constB&b){*static_cast(this)=b;//Doot