草庐IT

多重背包

全部标签

c++ - QObject 真的有多重?

这个问题在这里已经有了答案:GettingthesizeofaQtObject(4个回答)HowbigisQObject?[duplicate]关闭9年前。我最近发布了一个关于QObject在典型使用场景中的开销的问题,但不幸的是,该问题作为另一个在技术上没有回答该问题的问题的拷贝而被关闭。更糟糕的是,匆忙匆忙结束我的问题的“撒玛利亚人”打断了我在运行几个测试后刚刚完成打字的答案。由于我无法再在原始问题中发布我的发现,因此我将其发布在此处,以便其他可能需要该信息的人使用。 最佳答案 很多人暗示QObject很重,但不清楚它到底有多重

c++ - 多重虚拟继承中的虚拟表和内存布局

考虑以下层次结构:structA{inta;A(){f(0);}A(inti){f(i);}virtualvoidf(inti){coutC实例的确切内存布局是什么?它包含多少个vptr,每个vptr的确切放置位置?哪些虚拟表与C的虚拟表共享?每个虚拟表究竟包含什么?我是如何理解布局的:----------------------------------------------------------------|vptr1|AptrOfB1|b1|B2ptr|c|vptr2|AptrOfB2|b2|a|-----------------------------------------

c++ - 什么是多重再继承?

我将以下称为“多重再继承”:直接继承一个类一次,通过继承其一个或多个后代来间接继承一个或多次通过继承一个类的两个或多个后代来间接继承一个类两次或多次我想知道它是否存在以及如何明确地访问嵌入的子对象。1.)[ProfessionalC++,2nded.]†指出可编译程序不能有直接继承的类它的直接父级和所述父级的父类。是真的吗?给定一个GrandParent和Parent,扩展GrandParent,VC12和g++允许GrandChild直接从两个Parent继承和GrandParent.在VC12和g++中,可以这样定义这些类:GrandParent声明intnum数据成员。Paren

c++ - 私有(private)基类和多重继承

考虑:structA{intx;};structB:A{};structC:privateA{};现在,正如预期的那样,代码structD:C{D(){C::x=2;}};intmain(){Dd;}无法编译:test2.cc:Inconstructor‘D::D()’:test2.cc:1:16:error:‘intA::x’isinaccessibletest2.cc:7:12:error:withinthiscontext现在,如果我这样做了structD:B,C{D(){C::x=2;}};intmain(){Dd;}然后错误消失!A::x也不应该是不可访问的吗?这里的解释是什

c++ - 多重继承指针比较

我有一个类Derived,它直接继承自两个基类Base1和Base2。我想知道一般来说,比较指向基类的指针以确定它们是否是相同的Derived对象是否安全:Base1*p1;Base2*p2;/**Stuffhappenshere.p1andp2nowpointtovalidobjectsofeithertheir*basetypeorDerived*///assert(p1==p2);//Thisisillegalassert(p1==static_cast(p2));//Isthisok?assert(static_cast(p1)==static_cast(p2));//Howa

c++ - 从基类到不同派生类的多重继承转换

假设有这样的类层次结构:classA//baseclassclassB//interfaceclassC:publicA,publicB然后创建C对象:A*object=newC();是否可以将对象转换为B?重要提示:我假设我不知道该对象是C。我只知道它实现了接口(interface)B 最佳答案 否。这是不可能的(从A*直接转换为B*)。因为A和B的地址在classC的不同位置。所以类型转换总是不安全的,你可能会陷入意外行为。Demo.转换应该总是通过classC。例如A*pa=newC();B*pb=static_cast(pa

c++ - 多重或虚拟继承下的类的内存布局和vtable(s)?

我正在阅读“C++对象模型内部”,试图了解如何通过vtables实现多重和虚拟继承。(我非常了解单多态性)。当需要在虚拟继承期间或强制转换期间定位方法时,我很难理解究竟做了什么,因为要执行大量的偏移计算。是否有人能够帮助理解在多重继承或虚拟继承示例中如何使用多个vtable?如果我能理解布局和问题,我可能会更好地理解这个问题。 最佳答案 C++实现通常使用vtables来实现虚函数。vtable是指向函数的指针表。具有虚函数的类的每个对象都有一个指向包含该类所有虚函数地址的vtable的隐藏指针。在调用虚函数时,代码会计算函数指针在

c++ 多重继承强制转换

我有一个类:classBase;我还有一个界面classInterface;接下来我要创建一个类classDerived:publicBase,publicInterface;如果我有Base*object=newDerived;如何将object转换为Interface?(当然,如果我知道object实际上是派生类)编辑:我尝试过dynamic_cast和static_cast(未编译)。所以让我再解释一下这个问题:我有:classObject{...}classITouchResponder{public:virtualboolonTouchBegan(XTouch*touch)=

c++ - 防止 C++ 中的多重继承

这个问题在这里已经有了答案:Isitpossibletopreventmultipleinheritanceofspecificbaseclassesatcompiletime?(3个回答)关闭8年前。最近我参加了一次C++技术面试:面试官问了我一个我无法回答的问题:即使我在互联网和一些论坛上尝试过但无法得到答案,请参阅下面的代码片段:usingnamespacestd;classBase1{public:Base1(){cout说明:有两个名为Base1和Base2的基类和一个名为Derived的派生类。Derived是从Base1和Base2多重继承的。问题:我希望Derived只

c++ - 尽管基数为空,为什么多重继承会增加对象的大小?

鉴于此代码:#includestructA{};structB{};structC{};structE:A{intfield;};structF:A,B{intfield;};structG:A,B,C{intfield;};intmain(){std::cout>o;return0;}我得到以下输出:1900488为什么F和G的大小为8,即使它们的基数为空?为什么E的大小也不会增加?我正在使用VisualStudioCommunity2015版本14.0.25431.01Update3构建它。MSVC++版本显然是9.0。怎么会?如此奇特的内存布局有什么理由?