草庐IT

继承权

全部标签

c++ - 将继承自某个类的所有类加为好友

这与其说是一个实际问题,不如说是一种求知欲。我想知道在C++中是否有一种方法可以执行以下操作:让A成为一个类。我想使B类与继承自A的所有类成为friend。先说再说:我明明知道友情是不能遗传的。我想做的是制作一个templatefriend声明,也许使用SFINAE,将B与每个类C交友,以便C继承自A。这样的事情有可能吗?我试图从最简单的情况开始:你能和所有其他类(class)交friend吗?显然我知道这没有任何意义,可以将事情公开,但也许从这个起点开始可以完善事情以仅选择那些继承自A的类。 最佳答案 解决方法是使用继承的“key

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

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

c++ - C++ 中的继承 : define variables in parent-child classes

问题我正在寻找在父子类中定义变量的最佳方法,以便通过指向其父类的指针进行调用。这是协议(protocol):classBase{public:virtualvoidfunction()=0;};classA:publicBase{public:inta,b;A(inta_,intb_):a(a_),b(b_){};voidfunction(){//dosomething..}};classB:publicBase{public:inta,b;B(inta_,intb_):a(a_),b(b_){};voidfunction(){//dosomething..}};Base*elemen

c++ - 为什么 Boost 参数选择继承而不是组合?

我想这个网站上的大多数人都会同意可以通过两种方式外包实现:私有(private)继承作文继承最常被滥用。值得注意的是,当另一种形式或继承本来可以更好时,通常会使用公共(public)继承,并且通常应该使用组合而不是私有(private)继承。当然通常的注意事项适用,但我想不出任何时候我真的需要继承来解决实现问题。对于BoostParameterlibrary但是,您会注意到他们选择了继承而不是组合来实现命名参数习语(对于构造函数)。我只能想到经典的EBO(空基优化)解释,因为我看不到这里没有虚拟方法在起作用。有没有人知道更多或可以将我重定向到讨论?谢谢,马修。

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

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

c++ - 如何继承构造函数,或者如何调用参数数量未知的构造函数?

我正在尝试编写一个异常类,以便于与行为类似于printf的构造函数一起使用,示例:classExcBase{ExcBase(constchar*fmt,...){//callthingslikevsprintf}};但是构造的继承在c++中似乎不可用,所以我想写一个继承的类:classExcChild:publicExcBase{ExcChild(constchar*fmt,...):ExcBase(fmt,...)//XXX:howtopassthetrailingparameterstotheconstructor?{}};否则我将不得不为所有子类编写相同的构造函数,这太烦人了..

c++ - 使用模板继承调用祖 parent 构造函数

我选择使用模板化继承以避免多重继承和虚拟继承。我的目标是让各种child(4或5代或我无法控制的继承)有一个共同的函数调用,无论他们派生什么。我的解决方案是这样插入一个模板继承:templateclasscommon_call:publicBASE{public:voidfoo(){/*implementationindependentofbase*/}};classchild1:publiccommon_call{};classchild2:publiccommon_call{};这里有调用base的构造函数的问题。类base1和base2(不是我写的)有不同的构造函数,我必须在初始

Kotlin诗人空的构造家生成 - 继承

我正在尝试使用Kotlinpoet打印对SuperClass构造函数的呼叫。我当前(不编译)输出是:openclassNameOfASubclass:NameOfSuperclass{}为了使我的代码编译,我需要(以某种方式)打印openclassNameOfASubclass:NameOfSuperclass(){}或者openclassNameOfASubclass:NameOfSuperclass{constructor()}我无法使用Kotlinpoet实现它。有任何想法吗?看答案确实,在科特林诗人中,该问题在v.0.4.0中解决了

c++ - 静态值继承

这个问题在这里已经有了答案:Overridingstaticvariableswhensubclassing(8个答案)关闭7年前。我希望每个类都有自己的静态代码,可以从每个对象请求这些代码。我正在考虑这个,但它似乎不起作用:#includeclassParent{protected:staticintcode;public:intgetCode();};intParent::code=10;intParent::getCode(){returncode;}classChild:publicParent{protected:staticintcode;};intChild::code=

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