草庐IT

msf会话派生cs

全部标签

c++ - 派生类作为默认参数 g++

请看这段代码:templateclassA{classbase{};classderived:publicA::base{};public:intf(typenameA::base&arg=typenameA::derived()){return0;}};intmain(){Aa;a.f();return0;}在g++中编译生成如下错误信息:test.cpp:Infunction'intmain()':test.cpp:25:error:defaultargumentforparameteroftype'A::base&'hastype'A::derived'基本思想(使用派生类作为基

c++ - 使用指针数组时如何确定指向哪个派生类

我正在编写一个C++程序,它将掷骰子和掷硬币。我需要使用继承和多态性。我的虚拟功能设置正确。在我的基类(aRandomNumberGenerator)中,我有一个虚函数生成。在main()中,我需要有一个指向我的派生类(aDie和aCoin)的2个基类指针的数组。当我调用generate()函数时,我如何知道指向数组中的哪个派生类??代码:intmain(){intn;intfrequency1=0;//countof1srolledintfrequency2=0;//countof2srolledintfrequency3=0;//countof3srolledintfrequenc

c++ - 为什么派生类重写了基类的方法,还要调用基类的方法?

考虑以下程序:classBase{public:virtualvoidfoo()const{cout如果我从Base类foo方法中删除const,则Derived::foo()是叫。我似乎无法理解这种行为。1)这种行为的原因是什么?2)这是编译时还是运行时决定的?谢谢 最佳答案 在派生类中,函数签名是这样的:virtualvoidfoo();//Derived::foo其中没有提到const。它是一个非常量成员函数,而Base::foo是一个const成员函数。它们是两个不同的函数,因为const是函数签名的一部分。virtualv

c++ - 当派生类的析构函数是虚拟的而基类的 dtor 不是时代码崩溃

我在gcc4.4.5上尝试了以下代码。如果成员“data”不存在,代码执行正常,但在它存在的情况下,它会崩溃。当派生类的dtor不是虚拟时,它也不会崩溃。我知道在这两种情况下行为都是未定义的,如C++03(5.3.5/3)中所列,但仍然有人可以向我提供一些解释,为什么它在后一种情况下崩溃了?是的,我知道UB意味着任何事情都可能发生,但仍然我想知道特定于实现的细节。#includeusingstd::cout;structbase{intdata;base(){cout 最佳答案 假设在我的系统(gcc4.6.0,linuxx86_6

c++ - 创建派生类的模式,派生类本身和基类都包含许多字段

鉴于以下预先存在的框架,我需要找到好的设计模式来创建派生类的不同实例。我面临的主要挑战如下:challenge-1>每个类都有10多个字段,如何有效地将这些字段传递给派生类,再传递给基类。针对这个问题,我可以想出四个解决方案,但没有一个对我有吸引力。方法一>以简单格式传递所有参数classA::classA(intfield1,floatfield2,...,doublefield29)=>缺点:创建传入参数超过6~7个的函数不是一个好主意方法2>将所有参数作为结构传递structDataClassA{intfield1;floatfield2;...doublefield29;};s

c++ - C++异常处理如何处理异常派生类?

如果我正在捕获BaseException,这是否也会捕获从BaseException派生的异常?异常处理是否关心继承等,还是只匹配捕获的确切异常类型?classMyException{...};classMySpecialException:publicMyException{...};voidtest(){try{...}catch(MyException&e){//willthiscatchMySpecialException?}} 最佳答案 用代码很容易解释:http://ideone.com/5HLtZ#includecla

c++ - 派生类中的私有(private)虚函数

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++:overridingpublic\privateinheritanceclassbase{public:virtualvoiddoSomething()=0;};classderived:publicbase{private://现在,如果我执行以下操作:base*b=newderived;b->doSomething();//Callsthederivedclassfunctioneventhoughthatisprivate问题:它能够调用派生类函数,即使它是私有(private)的。这怎么可能?

c++ - 基模板类数据成员在派生模板类中不可见?

考虑以下C++代码,templatestructA{boolusable_;};templatestructB:A>{voidfoo(){usable_=false;}};structC:B{voidfoo(){usable_=true;}};intmain(){Cc;}我遇到编译错误:在成员函数中voidB::foo():template_inherit.cpp:12:error:'usable_'wasnotdeclaredinthisscope.这是为什么呢?有什么好的解决方法吗? 最佳答案 那是因为usable_是一个非依赖

c++ - 如何测试类 B 是否派生自类的模板族

如何在编译时测试B类是否派生自std::vector?templatestructis_derived_from_vector{staticconstboolvalue=????;};如何在编译时测试类B是否派生自模板族?templateclassFamily>structis_derived_from_template{staticconstboolvalue=????;};使用:templatestructX{};structA:X{}structB:std::vector{}structD:X{}intmain(){std::cout::value::value::value::

c++ - 无法将派生比较传递给 std::priority_queue

我需要将派生比较器传递给std::priority_queue,但由于某种原因,正在调用基类的operator()。这是显示此行为的最小代码:classBase{public:virtualbooloperator()(intl,intr)const{cout,Base>pq((A()));pq.push(1);pq.push(2);pq.push(3);pq.push(0);coutThecodeisavailableonideoneaswell请注意,我不能使用priority_queue,A>,因为我还有其他子类Base,这将导致大量代码重复1。我做错了什么?如何将比较器传递给将