草庐IT

继承权

全部标签

c++ - 关于C++虚拟继承的问题

以下代码来自《InsidetheC++objectmodel》一书#includeusingnamespacestd;classX{};classY:publicvirtualX{};classZ:publicvirtualX{};classA:publicY,publicZ{};intmain(){cout在我的电脑(Windows,VS2010)中,输出是:1448这是我的问题1,sizeof(X)=1书上说当X类型生成两个实例时,说xa和xb。编译向A中插入一个字节,以便xa和xb可以具有不同的地址。我不太明白原因。2,sizeof(Y)=4通过使用虚拟继承,我们会不会有一个额外

c++ - 重载虚函数集的部分继承

我以为我了解继承、虚函数和函数重载,但我有一个案例让我无法理解这些特性之间的相互作用。假设我有一个包含重载虚函数的简单基类,以及从它派生的第二个类:classb{public:virtualintf(){return1;}virtualintf(int){return2;}};classd:publicb{public:virtualintf(int){return3;}};请注意,派生类d仅覆盖了一个重载虚函数。我可以实例化d类的对象并在其上调用f(int),没问题:dx;std::cout但是当我尝试调用0参数函数时:std::cout失败了!gcc说“没有匹配函数来调用‘d::f

c++ - 继承模板方法

我有一个类似于下面的类:classSomeClass{public:templatevoiddoSomething(Args&&...args);//...othermethodsetc.};然而,我真正想要的是有两种不同的SomeClass。理想情况下,我可以从一个通用接口(interface)派生出SomeOtherClass,但我需要有一个不同的doSomething实现,并且模板化方法不能是虚拟的。我可以制作一个模板化类,但是每个采用其中之一(并且有很多)的方法本身都必须是模板等。我能想出的最好办法是在基类中实现两种类型的doSomething并让该方法调用虚拟方法来确定在运行

c++ - 具有继承的嵌套类的名称查找

这是否保证有效:structA{structGold{};};structB:publicA{typedefGoldBaseGold;structGold{};};structC:publicB{typedefGoldBaseGold;structGold{};};static_assert(is_same::value,"Nottherighttreasure!");static_assert(is_same::value,"Nottherighttreasure!");它似乎适用于VS2010。显然它依赖于微妙的声明顺序/名称查找规则,所以我想知道标准对此事的看法......

C++ [继承]

本文已收录至《C++语言和高级数据结构》专栏!作者:ARMCSKGT继承前言正文继承的概念及定义继承的概念继承的定义重定义基类和派生类对象赋值转换派生类中的默认成员函数隐式调用显示调用继承中的友元与静态成员友元静态成员菱形继承概念虚继承原理继承和组合最后前言面向对象的三大特性:封装,继承和多态,前面我们介绍了类和对象,如何对数据和数据操作方法进行封装,本章将为大家介绍另一大特性-继承,继承可以增强代码的复用性和增强功能的可扩展性,我们将学习如何通过父类衍生出更多特性的子类!这里,水果类作为父类,衍射出三种水果,苹果,西瓜和荔枝,这三种具体的水果都可以统称为水果,但是各自又有着自己的特性,例如苹

c++ - 继承特化的模板参数推导

考虑this代码:#includetemplatestructBB{};templatestructBB:BB{};structDD:BB{};templatevoidff(BB){}intmain(){ff(BB{});ff(DD{});//FAILS!'BB'isanambiguousbaseclassof'DD'return0;}ff(DD{})的来电无法编译,因为gcc-8.3不想从BB中选择一个和BB(clang做同样的事情)。但是BB是BB,那么为什么只是BB选不出来?!问题是:这是否符合标准,在定义ff时是否有解决方法?或BB帮忙gcc-8.3挑选BB?

c++ - 如何在 C++ 中使用 override 关键字进行多重泛型继承?

我有一个通用的IDetachable接口(interface),它提供了一个方法:templateclassIDetachable{public:virtualTdetached()const=0;};我有这些示例类:classA:publicIDetachable{virtualAdetached()constoverride{//someimplementationwhichreturnsadetachedAobject}};继承B时出现的问题:classB:publicA,publicIDetachable{virtualBdetached()constoverride{//so

c++ - 对象的大小是否受访问说明符类型和继承类型的影响?

在回答其中一个问题时,出现了一个讨论帖belowmyanswer.这表明根据访问说明符(或者可能是继承类型)private/protected/publicsizeofclass对象可能会有所不同!他们简短的讨论我还是不明白,这怎么可能? 最佳答案 注意下面的C++11新语言在C++03中,有一种语言使这成为可能,9.2[class.mem]/12(强调我的):Nonstaticdatamembersofa(non-union)classdeclaredwithoutaninterveningaccess-specifierarea

c++ - 使用具有多重继承的 Qt 信号和槽

我有一个类(MyClass),它从Qt内置对象(QGraphicsTextItem)继承了大部分功能。QGraphicsTextItem间接继承自QObject。MyClass还实现了一个接口(interface),MyInterface。classMyClass:publicQGraphicsTextItem,publicMyInterface我需要能够在MyInterface*上使用connect和disconnect。但是connect和disconnect似乎只适用于QObject*实例。由于Qt不支持从QObject派生类的多重继承,我无法从QObject派生MyInterf

c++ - 具有继承的静态变量的行为

我问这个问题是为了讨论。假设我有流动的类层次结构classA{public:staticintvarr;}classB:publicA{}ClassC:publicA{}如果我创建Bb1,b2,b3;和Cc1,c2,c3;和Aa1,a2;的对象>1.varr是否会在上述所有对象之间共享,或者不同的对象会有单独的实例?2.如果b1对象改变了它会反射(reflect)给c1对象的值。 最佳答案 是的,它将在所有派生类(B,C)和基类(A)的所有实例中共享。只会为静态对象创建一个实例,并且在所有地方都会引用该对象。因此,如果您在一个地方进