草庐IT

first_derived_t

全部标签

c++ - 为什么编译器不在 Derived 类构造函数的定义中提示?

请注意Derived类构造函数有ii作为它的第一个参数,但参数传递给了Base等于i故意。classBase{protected:inti;public:Base(inti):i(i){}};classDerived:publicBase{private:intk;public:Derived(intii,intk):Base(i),k(k){}//WhynotC2065:'i'undeclaredidentifier};intmain(){} 最佳答案 因为i是继承自Base的成员变量,所以是定义的。您可以自由访问初始化列表中的成

c++ - 在头文件和源文件中包含相同的 include derivate 是标准做法吗?

在使用say时,C++中的标准字符串类。你需要#include吗在头文件和源文件上?你能不能只拥有#include只在头文件上? 最佳答案 包含在头文件中可能表示类定义级别的依赖性(例如,您正在接受或返回字符串)。在这种情况下,您必须将include放在标题中;但是,如果您只在实现中使用字符串,则可能只需要在源文件中包含。 关于c++-在头文件和源文件中包含相同的includederivate是标准做法吗?,我们在StackOverflow上找到一个类似的问题:

c++ - Derived 到 MatrixBase<Derived> 转换背后的故事

当您将矩阵对象作为MatrixBase引用传递给函数时会发生什么?我不明白幕后到底发生了什么。示例函数代码如下:#include#includeusingnamspaceEigen;templatevoidprint_size(constMatrixBase&b){std::coutm;m它给出了以下输出:size(rows,cols):4(2,2)11616比1的差异从何而来?还有为什么需要转换?提前致谢! 最佳答案 sizeof在编译时进行评估,因此它与声明的(静态)对象类型有关。b类型为MatrixBase(忽略引用,就像si

c++ - 调试 C++ 代码 : Catch first NaN appearance

这个问题在这里已经有了答案:StoppingthedebuggerwhenaNaNfloatingpointnumberisproduced(1个回答)关闭6年前。是否有一种简单的方法可以在调试器中检查C++代码是否首次出现NaN值?

c++ - 这是正确的 : virtual method of Derived called before constructing Base object?

我知道在Base类的构造函数中-当调用虚拟方法时-调用Base方法,而不是派生-参见Callingvirtualfunctionsinsideconstructors.我的问题与这个主题有关。我只是想知道如果我在Derived类构造函数中调用虚拟方法会发生什么-但在构造Base部分之前。我的意思是调用虚方法来评估基类构造函数参数,请参见代码:classBase{public:Base(constchar*name):name(name){cout编译器g++(4.3.x-4.5x版本)输出为:Derived::getName()Base():DerivedDerived():Deriv

c++ - 多态性和数据隐藏 : Does a base class override or ignore a derived class' access restrictions?

请看下面的代码list:#includeusingnamespacestd;classBase{public:virtualvoidMessage()=0;};classIntermediate:publicBase{};classFinal:publicIntermediate{voidMessage(){coutMessage();*///Works:Intermediate*finalPtr=&final;//orBase*finalPtr=&final;finalPtr->Message();return0;}注意以下事项:在抽象Base类中,纯虚函数message()是pub

C++ 设计 : cast from base to derived class with no extra data members

我编写了很多处理消息协议(protocol)的代码。消息协议(protocol)通常会有一个通用的消息帧,可以从串行端口或套接字反序列化;该帧包含消息类型,消息负载必须根据消息类型进行处理。通常我会编写一组多态类,其中包含访问器方法和一个引用消息框架的构造函数。我突然想到,我可以直接从消息帧派生访问器类,然后从消息帧重新解释_cast到适当的访问器类,而不是根据对消息帧的引用构造访问器类。这使代码更加简洁并节省了一些字节和处理器周期。请参阅下面的(极其人为和浓缩的)示例。显然,对于生产代码,这一切都需要适当封装,转换成为派生类的成员,更好地分离关注点,并添加一些验证。为了把一个简明的例

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++ - LoadLibrary 失败 : First chance exception 0xC0000139 (DLL Not Found) - How to debug?

我有一个dll“mytest.dll”,当通过LoadLibrary()加载时,返回NULL(并且127作为GetLastError())。如果我在“mytest.dll”上使用DependencyWalker,它会报告它应该正确加载并且正确找到所有DLL。在主机exe上运行DependencyWalker的探查器选项会在日志中显示以下相关部分:00:00:55.099:Loaded"mytest.DLL"ataddress0x07860000bythread0xBBC.Successfullyhookedmodule.00:00:55.115:Firstchanceexception

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