草庐IT

继承权

全部标签

C++:避免​​继承层次结构中的双重维护

创建C++继承结构时,必须在多个地方定义完全相同的成员函数:如果B是一个抽象基类,并且D、E和F都继承自B,您可能会这样:classB{virtualfuncA(...params)=0;};classD:publicB{funcA(...params);};/*...etc...similarimplementationsforEandF*/所以,这里显然有一些重复。如果B的接口(interface)很大,如果接口(interface)需要更改,您可能有很多地方需要更改。一位同事建议使用巧妙创建的嵌入式#includes来搞点诡计,ala:classD:publicB{#includ

C++继承复制构造函数调用?

我有从A类派生的B类。我调用自己为B类对象实现的复制构造函数。我还为A类实现了自己的构造函数。当我为B类调用复制构造函数时,是否会自动调用此复制构造函数?或者如何做到这一点?这是好方法吗:A::A(A*a){B(a);//copystuff}谢谢! 最佳答案 您可以使用构造函数初始化列表来完成此操作,它看起来像这样:B::B(constB&b):A(b){//copystuff}我对语法做了很多修改,因为您的代码没有显示复制构造函数,而且它与您的描述不符。不要忘记,如果您自己实现复制构造函数,您应该遵循ruleofthree.

C++ 继承 : does lack of virtual destructor lead to memory leak?

这个问题在这里已经有了答案:Possiblememoryleakwithoutavirtualdestructor?(3个答案)关闭6年前。我对自己经常问自己的一个问题有疑问,是这样的情况:两个类,没有虚析构函数classBase{intmyInt;};classDerived:publicBase{intmyIntDerived;};intmain(){Base*base=newDerived;Derived*derived=newDerived;deletebase;deletederived;}第一个delete导致内存泄漏而第二个delete没问题,这样说对吗?

c++ - C中的结构继承

在标准C或C++中是否可以继承另一个结构? 最佳答案 你可以在另一个结构中嵌入一个结构来模拟C中的继承:typedefstruct{inti;}base;voidbasefunc(base*b);typedefstruct{baseb;charc;}extended;extendede;/*Initialiseextendedhere*/basefunc(&e.b);/*Usethetypechecker*/basefunc((base*)&e);/*Justmakesureyouknowwhatyou'redoing*/

c++ - 使用虚拟继承的类似乎允许基类构造函数覆盖另一个基类的成员

我对包含虚拟基的对象的内存布局不够熟悉,无法理解为什么以下内容似乎被clang和gcc编译错误。这是一个学术练习,所以请原谅构造函数中memset()的轻率。我正在使用带有clang7和gcc8.2的Linuxx86-64进行测试:#includestructA{A(){memset(this,0,sizeof(A));}inti;chara;};structB{charb='b';};structC:virtualB,A{};charfoo(){Cc;returnc.b;}当使用-O2-Wall-pedantic-std=c++17编译时,两个编译器都会生成以下没有警告的程序集:fo

【C++】C++中的继承

目录介绍:一,继承的访问权限二,基类和派生类对象赋值转换三,继承中的作用域四,派生类的默认成员函数1,构造函数2,析构函数3,拷贝构造和赋值运算符五,继承中的友元与静态成员1,继承与友元2,继承与静态成员六,复杂的菱形继承及菱形虚拟继承七,继承与组合介绍:        继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。    这里被复用的类叫做基类或父类,复用后产生新的类叫做派生类或

c++ - 虚拟继承抽象类中的参数化构造函数

我有一个经典的虚拟继承钻石:classA{protected:A(constchar*x){...}}classB:publicvirtualA{protected:B():A(NULL){...}public:virtualvoidfoo()=0;}classC:publicvirtualA{protected:C():A(NULL){...}public:virtualvoidbar()=0;}classD:publicB,publicC{public:D(constchar*x):A(x){...}voidfoo();voidbar();}我在B和C中使用NULL因为它们是抽象类

c++ - 关于 C++ 继承的初学者架构主题

来自纯“C”,我是一个C++新手,对OO开发或多或少是新手,因此我提前为我对以下主题的“幼稚”观点道歉。在下文中,我试图以抽象的方式描述我的问题(我的真实类是不同的)。代码部分可能无法编译,应仅被视为“想法”。我有几个类,继承自一个基类:classBase{};classDerived1:Base{};classDerived2:Base{};classDerived3:Base{};此外,vector包含指向派生类实例的指针:std::vectorcollection;现在我想提供这个类方案供其他用户使用。问题:当用户遍历集合时,他/她如何知Prop体的类类型?为派生类提供虚拟成员函

c++ - 使用可变参数模板的递归继承

考虑以下代码:#includestructActionOption{virtualvoidfoo(int)const=0;};templatestructActionType;templatestructActionType:ActionOption{virtualvoidfoo(int)constoverride{std::cout::foo(int)called.\n";}};templatestructActionType:ActionOption{virtualvoidfoo(int)constoverride{std::cout::foo(int)called.\n";}};

c++ - 与构建灵活设计的模板相比,多重继承机制

这是question的缩小版本由于范围太广而搁置。在ModernC++Design的第6-7页,AndreiAlexandrescu列出了三种多重继承弱于模板的方式构建灵活的设计。他特别指出,多重继承提供的机制很差(方括号中的文本和格式是我根据我对上下文):Insuchasetting[i.e.multipleinheritance],[tobuildaflexibleSmartPtr,]theuserwouldbuildamultithreaded,reference-countedsmartpointerclassbyinheritingsomeBaseSmartPtrclassa