草庐IT

C++ - 实例化派生类并使用基类的构造函数

我有一个基类,它的构造函数需要一个参数(字符串)。然后我有一个派生类,它也有自己的构造函数。我想实例化派生类并能够设置基类的构造函数的参数。classBaseClass{public:BaseClass(stringa);};classDerivedClass:publicBaseClass{public:DerivedClass(stringb);};intmain(){DerivedClassabc("Hello");}调用派生类时不知道如何设置基类构造函数的参数。 最佳答案 您有两种可能性-内联:classDerivedCla

c++ - 我可以在基类中重载纯虚方法吗?

在下面的示例中,我有一个带有纯虚方法(又名FUN1)和一个普通方法(又名FUN2)的抽象类。#includeclassA{public:virtualvoidfun(inti)=0;//FUN1voidfun(){this->fun(123);}//FUN2};classB:publicA{public:virtualvoidfun(inti){std::cerr为什么我不能在派生类上调用FUN2?g++报错:main.cpp:19:8:error:nomatchingfunctionforcallto‘B::fun()’编辑:注意Overloadofpurevirtualfuncti

c++ - 空基类是否会影响派生类的布局?

C++标准(引用自n3242草案)关于子对象[intro.object]的说明如下:Unlessanobjectisabit-fieldorabaseclasssubobjectofzerosize,theaddressofthatobjectistheaddressofthefirstbyteitoccupies.Twodistinctobjectsthatareneitherbit-fieldsnorbaseclasssubobjectsofzerosizeshallhavedistinctaddresses.现在,给定以下片段:structempty{};structmember

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

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

c++ - 是否可以检查是否为类定义了成员函数,即使成员是从未知基类继承的

我发现类似的问题和答案,如thisone.但是,正如我所尝试的那样,只有在被测试的成员直接定义在被测试的类中时,这个SFINAE测试才会成功。例如下面的类B,D1打印HAS而其他两个打印NOTHAS。有没有办法判断一个类是否有成员,是自己定义的,还是基类定义的,这种情况下不知道基类的名字。动机是我想编写一个通用函数,如果它存在,它将调用某个方法(无论是否来自基类,参数的类型都是通用的,保留其可能基类的类型)。#includeclassHasFoo{public:typedefcharSmall;typedefstruct{char;char;}Large;templateclassSF

c++ - 在派生对象到基类的 "this"指针上使用 static_cast 的问题

这是取自EffectiveC++3ed的一个例子,它说如果这样使用static_cast,对象的基础部分被复制,并且调用从该部分调用。我想了解幕后发生的事情,有人会帮忙吗?classWindow{//baseclasspublic:virtualvoidonResize(){}//baseonResizeimpl};classSpecialWindow:publicWindow{//derivedclasspublic:virtualvoidonResize(){//derivedonResizeimpl;static_cast(*this).onResize();//cast*thi

c++ - 从 C++ 中的空基类继承

我想创建一个名为“Node”的空基类,然后从中派生其他类,例如“DecisionNode”和“Leaf”。这样做很有意义,因此我可以利用多态性将这些不同类型的节点传递给方法,而无需在编译时知道将传递给方法的内容,但每个派生类都不共享任何状态或方法。我认为最好的实现方法是使构造函数成为纯虚拟的,而无需在基类中创建额外的纯虚拟方法(这会增加困惑)。因此,在该类的头文件“Node.h”中,我写道:classNode{private:virtualNode();};在“Node.cpp”中我写道:#include"Node.h"virtualNode::Node()=0;此实现防止Node被另

c++ - 从基类调用重写函数?

我的问题可能最好用一个例子来解释。例如,我有2个类:一个基类和一个派生类:classbaseClass{public:baseClass(){foo();}virtualboolfoo(){printf("baseClass");returnfalse;}};classderivedClass:publicbaseClass{public:boolfoo(){printf("derivedClass");returntrue;}};当我创建derivedClass的实例时,baseClass中的构造函数将被调用,并且foo()将从它的构造函数中调用.问题是,baseClass的构造函数

c++ - 您可以覆盖基类中定义的私有(private)函数吗?

我相信,派生类只能覆盖它从基类继承的那些函数。我的理解对吗?也就是说,如果基类有一个公共(public)成员函数func,那么派生类可以覆盖成员函数func。但是如果基类有一个私有(private)成员函数foo,那么派生类就不能覆盖成员函数foo。我说的对吗?编辑在研究了SO成员给出的答案后,我想出了一个代码示例。我提到了我在代码中作为注释研究的要点。希望我是对的。谢谢/*Pointstoponder:1.Irrespectiveoftheaccessspecifier,thememberfunctionscanbeoverrideinbaseclass.Butwecannotdir

c++ - 基类指针与继承类指针?

假设我有一个继承自Animal类的Dog类。这两行代码有什么区别?Animal*a=newDog();Dog*d=newDog();一种是指向基类的指针,另一种是指向派生类的指针。但这种区别何时会变得重要?对于多态性,两者的工作方式完全相同,对吧? 最佳答案 为了类型检查的所有目的,编译器对待a就好像它可以指向任何动物,即使你知道它指向一只狗:你不能通过a到一个期待Dog*的函数.你做不到a->fetchStick(),其中fetchStick是Dog的成员函数但不是Animal.Dog*d2=dynamic_cast(d)可能只是