jjzjj

baseClass

全部标签

C++ 创建对象数组(来自不同类)

我需要创建一个数组来保存来自多个类的对象。例子classbaseClass{//};classfirst:baseClass{//};classsecond:baseClass{//};如何创建可以容纳first和/或second对象的数组?这对我来说有点像家务活,所以我不得不使用数组,我已经搜索过并且知道它是用boost库ans这样完成的,但我别无选择...... 最佳答案 最好的做法是创建一个指向基类的智能指针数组——最好是Boost或C++11版本之一。将其设为指针数组可以消除访问对象时“切片”对象的风险。使用智能指针可以降低

C++:纯虚赋值运算符

为什么如果我们在基类中有纯虚拟赋值运算符,然后我们在派生类上实现该运算符,它会在基类上产生链接器错误?目前我对http://support.microsoft.com/kb/130486只有以下解释,它说行为是设计使然,因为正常的继承规则不适用。我不太清楚,为什么它会故意生成链接器错误?有人可以给我更清楚的解释吗?编辑:添加了发生错误的我的简化代码:class__declspec(dllexport)BaseClass{public:intmemberA;virtualBaseClass&operator=(constBaseClass&rhs)=0;};class__declspec

C++:使用计算参数调用基类构造函数

这个简单的例子演示了调用基类构造函数的C++语法——据我作为C++学习者的理解:classBaseClass{protected:inti;public:BaseClass(intx){i=x;}};classDerivedClass:publicBaseClass{intj;public:DerivedClass(intx,inty):BaseClass(y){j=x;}在这里,基类构造函数可以将命名参数作为派生类构造函数的输入。现在,如果我想用一个不是直接输入到DerivedClass()的输入值调用BaseClass()构造函数怎么办?基本上,我想在DerivedClass()中

c++ - 为什么即使我有未定义的成员函数,以下代码也能编译?

我在处理这段代码的过程中进行了一半,并认为这显然不会编译,然后才按下构建按钮。令我惊讶的是,它不仅可以编译,而且还可以链接和工作。如果我猜我会说SFINAE负责编译...是吗?structBaseClass{public:BaseClass(){}templateBaseClass(constT&a_other){inti=0;//forbreakpoint}templateBaseClass&operator=(constT&a_other){inti=0;//forbreakpointreturn*this;}private:BaseClass(constBaseClass&a_o

c++ - 如何设计一个基类,使其在运行时知道所有 "derived"类?

通常,如果您事先知道要创建的所有类型,就可以这样做:typedefenum{BASE_CREATURE_TYPE=0,ANIMAL_CREATURE_TYPE,...}CREATURE_TYPES但这变得很乏味,因为每次创建新类时,都需要更新枚举。此外,CREATURE_TYPES仍然只是枚举中的项目-如何绑定(bind)到实际类?我想知道是否有某种方法,我可以只编写类,并在运行时创建一个包含所有类型的集合,而无需实际实例化对象。这在C++中可行吗?在Java中有一种叫做“静态block”的东西,它在JVM加载类时执行。编辑:这个问题与静态block无关——这只是一个例子——我想知道是

c++ - C++ 中的双重分派(dispatch)/多重方法

我有一个关于C++双重分派(dispatch)的问题。在下面的代码中,我希望第二组的结果与第一组的结果相匹配。我不知道实际类型(除非我尝试dynamic_cast)但我知道该对象继承自BaseClass类型。实现此目标的最有效(性能方面)方法是什么?在谷歌搜索了一段时间后,我发现了双重分派(dispatch)和loki多重方法。我在Shape示例中遇到的问题是,在我的应用程序中,Processor和BaseClass是完全独立的,并且没有它们可以相互调用的通用方法。其次,只有一个处理器(即没有任何东西继承自它)。感谢您的帮助。#include#includeusingnamespace

c++ - 为什么我不应该在 header 中初始化静态变量?

这个问题在这里已经有了答案:HowtoinitializeprivatestaticmembersinC++?(18个答案)关闭8年前。那么,假设我有一个这样的标题:#ifndefBASECLASS_H#defineBASECLASS_HclassBaseClass{public:staticintgetX(){returnx;}private:staticintx;};intBaseClass::x=10;#endif我多次听说我不应该在header中初始化静态变量,而应该在cpp中初始化。但是因为有guard,所以应该只有一份BaseClass::x。所以我有点不明白为什么要放in

c# - 如何在 MongoDB 中为不同的字段名称注册 ScalarDiscriminatorConvention?

我正在编写C#代码以从现有的MongoDB数据库中提取数据并将其放入各种C#类中。数据库的一部分是多态的:如果字段type是A,那么该文档中将存在一组特定的字段。如果type是B,将存在一组不同的字段。这是ScalarDiscriminatorConvention的完美用例,所以我使用ScalarDiscriminatorConvention("type")。但我不知道如何让MongoDB驱动程序使用该约定!TheMongoDBmanualpageonconventions让我觉得这行得通:varpack=newConventionPack();pack.Add(newCamelCas

ruby-on-rails - Mongoid store_in 产生随机结果

我正在使用Rails3.2.2和mongoid2.4.6。为了保持我的集合较小,我使用“store_in”语句将子对象存储到单独集合中的基类。我的代码如下所示:classBaseClassincludeMongoid::DocumentendclassChildClass1对象似乎随机存储在或或其他子集合中。Child1类型的对象有时会存储在集合Child2中。这是我在日志中看到的令人惊讶的事情:StartedPOST"/child_class_1"for127.0.0.1at2012-05-2210:22:51-0400ProcessingbyChildClass1Controlle

Swift:带有回调的泛型

我试图保留一个回调字典,其中回调可以包含一个基类类型的参数,然后我可以用任何派生类型调用回调。当我尝试这样做时,出现编译错误。我来自C++/C#背景,所以我很难理解这是如何在Swift中完成的。这是一个简化的用例:publicfuncRegisterMessage(type:MessageType,callback:(msg:T)->()){//ERROR:Cannotassignavalueoftype'(msg:T)->()'toavalue//oftype'((msg:Message)->())?'MessageCallbacks[type]=callback}privateva