草庐IT

继承权

全部标签

c++ - 内存管理容器设计问题 - 项目需要继承

我正在设计一个内存管理容器,考虑到性能和易用性,尤其是对于游戏开发项目。Here'sitinit'scurrentstate.我将从源代码中提取最重要的部分。//Uptrisatypedefforstd::unique_ptrclassMemoryManageable{boolalive{true};public:boolisAlive()const{returnalive;}};templatestructDeleter{booloperator()(constUptr&mItem)const{return!mItem->isAlive();}};templateclassMemor

c++ - static_cast 如何与虚拟继承一起使用?

因此不可能使用具有虚拟继承的static_cast进行向下转型,但是如何进行以下向上转型:classBase{...};classDerived:publicvirtualBase{...};...Derived*d=newDerived();Base*b=static_cast(d);对象的内存布局:[derivedpart|basepart]我知道向上转型被认为是“安全的”,但是当继承是虚拟的时,编译器如何在编译时知道基础子对象的偏移量?static_cast是否使用vtable?当我们有这样的东西(注意它不是虚拟的)时,这尤其令人困惑:classThird:publicDeriv

c++ - 继承构造函数和虚基类

我将要创建一个概念上看起来有点像这样的异常类层次结构:#include#includeclassExceptionBase:publicstd::runtime_error{public:ExceptionBase(constchar*msg):std::runtime_error(msg){}};classOperationFailure:virtualpublicExceptionBase{public:usingExceptionBase::ExceptionBase;};classFileDoesNotExistError:virtualpublicExceptionBase{

c++ - 具有多态性的多重保护继承

我有一个关于protected函数的多重继承和多态性的问题。很难描述它,所以我希望它足够清楚。假设我有三个类:classbaseClass{protected:virtualintfunction()=0;};classderived_A:publicbaseClass{intfunction(){//implementation1};};classderived_B:publicbaseClass{intfunction(){//implementation2};};classderived_C:publicderived_A,publicderived_B{baseClass**p

c++ - friend 功能在这里得到继承吗?

Derived类中的方法fun()是私有(private)的。当我们通过运行时多态调用函数ptr->fun()时,它正在执行。但这违反了派生类的封装属性。#includeusingnamespacestd;classDerived;classBase{private:virtualvoidfun(){coutfun();return0;}谁能解释一下发生了什么? 最佳答案 首先,你的Derived::fun()也是virtual,因为如果派生类中的函数与派生类中的虚函数具有相同的声明基类,派生类中的函数自动获得virtual,即使没

c++ - 模板继承中的范围解析(可能是所谓的 mixin)

假设我有模板类#includeclassA1{public:intx{314159};};templateclassA2:publicContext{};templateclassA3:publicContext{};templateclassA4:publicContext{public:intfunc(){returnContext::A1::x;}intgunc(){returnthis->A1::x;}inthunc(){returnA1::x;}};intmain(){A4>>my_A;std::cout在模板类的定义中A4,至少当只有实例类型时A4>>使用的,好像可以引用x

c++ - 变体与继承

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion假设我正在为某种编程语言编写编译器。通常使用抽象语法树(AST)作为内部表示。我可以看到两种可能的设计方式:使用boost::variant使用继承由于节点的层次结构是固定的-boost::variant就足够了。我的问题是,从可维护性和运行时效率的角度来看,每种方法的优缺点是什么?

c++ - 绑定(bind)到私有(private)继承的成员函数

我想将std::bind到私有(private)基类的成员函数,在派生类中使用using声明使其“公开”。直接调用函数是可行的,但绑定(bind)或使用成员函数指针似乎无法编译:#includestructBase{voidfoo(){}};structDerived:privateBase{usingBase::foo;};intmain(int,char**){Derivedd;//callmemberfunctiondirectly://compilesfined.foo();//callfunctionobjectboundtomemberfunction://nomatchi

C++ 多重虚拟继承与 COM

网络上充斥着对"dreadeddiamondproblem"的解释.StackOverflow也是如此。我想我有点理解,但我无法将这些知识转化为理解相似但不同的东西。我的问题一开始是一个纯C++问题,但答案很可能会分支到MS-COM细节。一般的问题是:classBase{/*purevirtualstuff*/};classDer1:Base/*Non-virtual!*/{/*purevirtualstuff*/};classDer2:Base/*Non-virtual!*/{/*purevirtualstuff*/};classJoin:virtualDer1,virtualDer

c++ - 使用从模板化基类继承的成员变量 (C++)

我正在尝试在派生类中使用模板化基类的成员变量,如本例所示:templatestructA{intx;};templatestructB:publicA{voidtest(){intid1=this->x;//alwaysworksintid2=A::x;//alwaysworksintid3=B::x;//alwaysworksintid4=x;//failsingcc&clang,worksiniccandxlc}};gcc和clang都对使用此变量非常挑剔,并且需要明确的范围或明确使用“this”。对于其他一些编译器(xlc和icc),一切如我所料。这是xlc和icc允许非标准代码