javascript oop、instanceof 和基类
全部标签 我有一个带有几个纯虚方法的基类,例如classGenericFunction{public:GenericFunction(){/*Initgenericfunctionstate*/};virtualvoidIterate(short*ps,unsignedcs)=0;virtualvoidIterate(float*ps,unsignedcs)=0;}然后我有一堆实现特定功能的派生类,我想在这些函数的集合上调用Iterate()方法,为每个函数提供一个数据样本block。我只知道调用Iterate()时的数据类型。Iterate()方法对于许多函数来说几乎完全相同,所以我想使用模板
请注意,这只是一个关于模板语法的问题——不是一般的c++面向对象、多态性设计。此示例是为此目的而捏造的假设我有一个基类:classA:publicB{...};我用它...Aa;a.DoSomething();如果我想做这样的事情,能够在编译时派生A,不仅来自B,还来自其他类。这样我就可以像这样使用它:Aa;//likeclassA:publicBa.doSomething();Aac;//likeclassA:publicCac.DoSomething();我可以做这样的事情吗?templateclassA:publicBASECLASS{...};让我们假设我的构造函数有一个参数,
我正在寻找从通过C::A和B::A继承它的子类D调用基类A的方法。templateclassA{public:templatevoidFunc(void){std::cout::Func"classB:publicA{};templateclassC:publicA{};classD:publicB,publicC{public:D(){static_cast*>(this)->A::Func();static_cast*>(this)->A::Func();}};这按预期工作,D在初始化时使用子类的模板参数调用B::A::Func和C::A::Func。但是,当D是模板类时,这似乎不
您可以使用std::is_base_of检查一个类是否继承自某个基类,但我如何知道一个类是否直接继承自该类(即间接继承自该类)? 最佳答案 不可能直到N2965已实现。 关于c++-如何判断一个类是否间接继承自基类?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/26431613/
==编辑3==最后,我只是在Shape和checkIntersect(Shape)中添加了一个抽象方法和让他们调用我的免费(非成员)函数,这些函数已经在一个地方实现,同时使用一些预处理器和头文件技巧来为自己保存一些重复代码,以防我需要添加其他子类。为了完成起见,我将标记Jeffrey的回答,因为他的回答最接近我所做的,但是我感谢你们所有人向我展示了一些我实际上不知道的很酷的东西(函数模板)并将我链接到其他2个问题也提出了Visitor/Doubledispatch作为解决方案。虽然我不得不说,但我希望我们能尽快在C++中看到多方法。==编辑结束==所以我有一个基类Shape及其子类:T
我想定义派生类型(SBar)的constexpr值,使用构造函数,其唯一参数是基类(SFoo)的变量,它仅用于初始化基类。当基类没有数组成员时,这很好用。但是,当我添加一个数组时,派生值不再是constexpr。不过,基类的简单拷贝确实会产生constexpr结果。为了安全起见,我已明确默认所有复制和移动构造函数。测试.cpp#defineUSE_ARRAYstructSFoo{constexprSFoo()=default;constexprSFoo(SFooconst&)=default;constexprSFoo(SFoo&)=default;constexprSFoo(SFoo
这是我的第一篇文章。我花了数小时检查问题的解决方案,在SO上逐个链接地搜索链接,但没有一个描述我的问题的确切信息(我能得到的最接近的是this和this)。所以,让我们开始工作吧!说明:我必须实现一组专门的类,每个类都可以存储其类型的链接列表。另外(棘手的部分),我必须实现一个集合管理器,以向集合中添加更多专业类不会影响其代码的方式。让我解释一下我到目前为止所拥有的。classIList{public:virtualIList&operator+(IList&)=0;virtualvoidprint()=0;virtualintg_Size()const=0;//perfecttill
背景最近我一直在考虑如何设计一个特定的软件,有一次我制作了以下部分:templateclassFoo:publicvirtualMixins...{/*...*/};我的想法是能够根据用户的需要使用额外的属性或行为来扩充基本类。假设一个应用程序需要使用带有标识号的Foo。也许其他一些应用程序需要能够用颜色来谈论Foo。这些需求可以通过添加以下类来满足:classHasID{intm_id=-1;public:intgetID(){returnm_id;}voidassignID(intid){m_id=id;}};classHasColor{public:intcolor=0;};问题
这个问题在这里已经有了答案:Whatisobjectslicing?(18个答案)关闭5年前。我有一个基类A和一个派生类B。classA{public:intx;virtualintgetX(){returnx;}};classB:publicA{public:inty;};虚函数只是为了让它多态。接下来我声明一个A的列表,但将B放在里面:vectorlist;Bb1,b2;b1.y=2;b2.x=10;list.push_back(b1);list.push_back(b2);现在我想遍历vector上的所有元素并访问y成员(只有B有):for(autoit=list.begin()
我想创建一个存储对象,我可以在软件应用程序中设置/获取各种类型的属性。(假设该属性是一个字符串。)如果尝试检索之前没有存储任何属性的某个类型T的属性,我希望为作为T的基类的最派生类型返回该属性。我希望这一切对存储属性的类类型没有任何特殊要求。所以基本上,它应该看起来像这样。classStore{public:templatevoidput(conststring&property){/*MAGICHERE*/}templatestringget()const{/*MOREMAGIC*/}};classX{};classY:publicX{};classZ:publicY{};int