jjzjj

C++ 保护 : fail to access base's protected member from within derived class

不可否认,这个问题的标题听起来与你的邻居迈克反复问的问题几乎一模一样。我发现很多问题的措辞相同,但没有一个是我的问题。首先,对于这个问题的上下文,我想澄清几点:1,c++访问控制是基于类而不是基于实例。因此,下面的代码是完全有效的。classBase{protected:intb_;public:boolIsEqual(constBase&another)const{returnanother.b_==b_;//accessanotherinstance'sprotectedmember}};2,我完全理解为什么以下代码无效-另一个可以是兄弟实例。classDerived:public

c++ - 传递派生类型列表,以便将它们存储为成员

我有一个类widget.我有一个抽象类base与衍生物derived_a,derived_b等我要widget保存从base派生的任意数量的对象以便以后多态地使用它们。我的第一次尝试是这样的:#include#include#include#includeclasswidget{public:explicitwidget(std::vector>&¶ms):members{std::move(params)}{}private:std::vector>members;};并且会这样调用:std::vector>v;v.push_back(std::move(std::make_

c++ - 在不知道类成员的情况下从基类实例创建派生类实例

这种情况有可能吗?classBase{intsomeBaseMemer;};templateclassDerived:publicT{intsomeNonBaseMemer;Derived(T*baseInstance);};目标:Base*pBase=newBase();pBase->someBaseMemer=123;//SomevaluesetDerived*pDerived=newDerived(pBase);pDerived->someBaseMemer的值应与pBase->someBaseMember相等,与其他基成员相似。 最佳答案

c++ - 基于模板参数在 C++ 中模拟动态调度

为了问题的缘故,这被大大简化了。假设我有一个层次结构:structBase{virtualintprecision()const=0;};templatestructDerived:publicBase{typedefTraits::TypeType;Derived(Typedata):value(data){}virtualintprecision()const{returnPrecision;}Typevalue;};我想要一个带有签名的非模板函数:Base*function(constBase&a,constBase&b);其中函数结果的特定类型与a和b中具有较大Precisio

c++ - 将 Derived*const 转换为 Base*const

编辑-将问题置于上下文中。给定:structBase{...};structDerived:publicBase{...};classAlice{Alice(Base*const_a);...};classBob:publicAlice{Bob(Derived*const_a);...};当我尝试实现时Bob::Bob(Derived*const_d):Alice(static_cast(_d)){}它不起作用。const_cast对我来说没有意义,因为我不想更改常量,而且我没有更改我指向的内容,那么为什么g++会告诉我invalidstatic_castfromtype‘Derive

c++ - 在 C : Derived to base conversions 中包装 C++

我正在将一个简单的C++继承层次结构包装到“面向对象的”C中。我试图弄清楚在将指向C++对象的指针视为指向不透明C结构的指针时是否存在任何问题。特别是在什么情况下派生到基的转换会出现问题?类本身比较复杂,但层级较浅,仅采用单继承://AbaseclasswithlotsofimportantsharedfunctionalityclassBase{public:virtualvoidsomeOperation();//Moreoperations...private://Data...};//OneofseveralderivedclassesclassFirstDerived:pub

c++ - 如何在抽象类中声明重载运算符并在派生的非抽象类中覆盖它?

我正在尝试编写一个带有一些纯虚拟二元运算符的抽象类,这些运算符应该由派生类实现,以实现运算符多态性。这是一个简化的示例:classBase{public:virtualconstBase&operator+(constBase&)const=0;};classDerived:publicBase{public:constDerived&operator+(constDerived&)const;};constDerived&Derived::operator+(constDerived&rvalue)const{returnDerived();}现在运算符做什么并不重要,重要的是它返回

c++ - 虚拟继承的价格是多少?

这似乎是一个基本问题,但我没有看到它被问到:假设以下简单情况:没有虚拟成员。虚拟继承用于允许多个路径指向同一基。就访问最派生类的成员所需的时间而言,虚拟继承的代价是多少?特别是,如果价格不为零,它是仅适用于通过多条路径继承的成员还是也适用于其他成员? 最佳答案 Whatisthepriceofvirtualinheritanceintermsofthetimeneededtoaccessthemembersofthemostderivedclass?一个偏移查找和一个加法(2条指令和一个内存获取)Inparticular,ifthe

c++ - 删除运算符如何使用指向基类的指针释放内存

考虑这段代码:classbase{T*obj=newT[40];//...public:base(){/*...*/}virtual~base(){delete[]obj;//...}...};classderived:publicbase{T*obj2=newT[20];//...public:derived(){/*...*/}~derived(){delete[]obj2;//...}...};voidfunc(){base&&exmp=giveder();//giveder()returnsderivedbase*dis=newderived[50];//...delete[]

c++ - 帮助类型特征

假设我们有以下模板类templateclassWrap{/*...*/};我们无法改变Wrap.这很重要。让有派生自Wrap的类.例如,classNewInt:publicWrap{/*...*/};classMyClass:publicWrap{/*...*/};classFoo:publicWrap{/*...*/};我们也不能改变这些类。以上所有类(class)都是第3方。它们不是我的。我需要以下编译时间type_traits:templatestructis_derived_from_Wrap{staticconstboolvalue=/**/;};我需要什么?assert(i