草庐IT

c++ - 将指针转换为子类 (C++)

我正在开发一款游戏,我需要找到一种方法来获取游戏中某个“mapblock”的值(字符格式)。我有一个处理所有Sprite的DisplayableObject类,以及一个处理播放器对象的子类ThreeDCubePlayer。为了便于渲染/更新所有内容,所有DisplayableObject都存储在一个数组中,第0个单元包含播放器(类型为ThreeDCubePlayer)。ThreeDCubePlayer具有与DisplayableObject不同的构造函数(它需要两个额外的参数)并且只有ThreeDCubePlayer具有我需要的GetMap()函数。所以,这是我到目前为止所做的:Thr

c++ - 处理父/子类关系中的循环包含

假设我创建了一个类,比如Parent,它与Child具有组合关系。父类包含子级列表。我希望所有子级都持有对父级的引用,因此每个子级都拥有一个Parent指针。这会造成循环包含。我在parent.h中引用了Child,在child.h中引用了Parent。因此Parent需要包含Child,而Child需要包含Parent。解决此问题的最佳方法是什么? 最佳答案 你必须使用前向声明://parent.hclassChild;//ForwarddeclarationclassParent{vectorm_children;};//chi

c++ - 创建 MFC 控件的子类的正确方法是什么?

我们使用资源编辑器布局对话框。假设我有一个名为IDC_RICH的RichEditCtrl。我想将它链接到自定义类CMyRichEditCtrl:CRichEditCtrl的一个实例,而不失去在资源编辑器中设置属性的能力。什么是正确的方法?您当然可以通过创建一个DDX链接变量并将类型更改为CMyRichEditCtrl来获得一些功能。但在某些情况下,我看到人们调用这样的代码:m_Rich.SubclassDlgItem(IDC_RICH,this));有什么区别?编辑:我遇到的一个问题是,当我覆盖Create(Ex)方法时,它们不会被调用。这有点像当我的对象链接到资源标识符时控件已经创建

c++ - 子类如何使用与子类相同的方法名调用父类(super class)的方法?

#includeusingnamespacestd;classPerson{public:voidsing();};classChild:publicPerson{public:voidsing();};Person::sing(){cout 最佳答案 suzie.Person::sing(); 关于c++-子类如何使用与子类相同的方法名调用父类(superclass)的方法?,我们在StackOverflow上找到一个类似的问题: https://stack

c++ - 设计建议——返回子类时避免 "invalid covariant return type"

我有以下情况:我指定一个纯虚函数:虚拟PredictedMatchPredictMatch(constMatch&match)const=0;我还有:类ImpactPredictedMatch:publicPredictedMatch现在,我想做的是:ImpactPredictedMatchPredictMatch(constMatch&match)const;在一个实现了之前的纯虚函数的类中。我原以为编译器会根据需要简单地转换返回的类型,但我得到:impact_predictor.h:18:24:错误:“虚拟ImpactPredictedMatchImpactPredictor::P

c++ - 从父类(super class)调用子类中的虚函数

我知道这个问题一定被无数次问过,但我搜索了以前的问题,似乎什么也没有。它是关于C++中的继承和虚函数。我在从父类(superclass)的子类中调用虚函数时遇到问题。我举个例子。从三个相互继承的类开始。classA{voidfoo(){bar()}virtualvoidbar(){}};classB:publicA{virtualvoidbar(){}};classC:publicB{virtualvoidbar(){//dosomething}};现在我想要一个声明为B*但实例化为C*的变量。B*myObject=newC();myObject->foo();当我这样做并在myObj

c++ - win32 c++ 在没有子类化的编辑控件中检测到 'enter'?

基本上我想要一个Enter来触发一条消息,当编辑控件聚焦并且用户按下enter时我可以捕捉到。网上所有的解决方案似乎都是关于子类化的,但我想知道是否有另一种解决方法?例如,我的按钮有一个标识符ID_BUTTON_SEND。这是我的想象;caseWM_COMMAND:switch(LOWORD(wParam))caseID_BUTTON_SENDif('enterwaspressed')dothiselsedefault...你明白了:)我读过http://support.microsoft.com/kb/102589但坦率地说,选项1对我来说意义不大。干杯

c++ - 模板子类覆盖父类的虚函数

下面的代码是用gccv4.3.3编译的,模板化的子类似乎覆盖了父类中的虚函数,但这是否违反了不能有虚模板函数的规则?还是发生了其他我不明白的事情?classBaseClass{public:virtualvoidFunc(intvar){std::coutclassTemplateClass:publicBaseClass{public:usingBaseClass::Func;virtualvoidFunc(TTvar){std::coutb;BaseClass*c=newTemplateClass;intintVar=3;doubledoubleVar=5.5;a.Func(int

c++ - 使用指向基抽象类的指针访问子类成员

classa//mybaseabstractclass{public:virtualvoidfoo()=0;};classb:publica//mychildclasswithnewmemberobject{public:voidfoo(){}intobj;};intmain(){bbee;a*ptr=&bee;ptr->obj;//ERROR:classahasnomembernamed"obj"}我的问题是,当我有一个指向子类(“b”)对象的基类(“a”)指针时,如何访问“obj”成员?我知道转换应该可以解决问题,但我正在寻找更好的解决方案。 最佳答案

c++ - 关于从基类到子类指针的向下转型

静态检查工具显示了以下代码的违规行为:classCSplitFrame:publicCFrameWnd...classCVsApp:publicCWinAppCWnd*CVsApp::GetSheetView(LPCSTRWindowText){CWnd*pWnd=reinterpret_cast(m_pMainWnd)->m_OutputBar.GetChildWnd(WindowText);returnpWnd;}错误信息:“CSplitFrame”类继承自“CWnd”类描述:避免向下转换继承层次。此规则检测从基类指针到子类指针的转换。好处:允许向下转换继承层次结构会导致维护问题,