草庐IT

msf会话派生cs

全部标签

c++ - 如何在模板派生类中调用模板基类的构造函数?

假设我有一个基本模板类数组:templateclassArray{protected:T*m_data;intsize;public:Array();//constructorArray(intn);//constructorArray(constArray&s_data);//CopyConstructor//andsoon..}它有构造函数和析构函数。我还有一个派生模板类NumericArray:templateclassNumericArray:publicArray{public:NumericArray();NumericArray(intn);NumericArray(co

c++ - 禁止在派生类中使用默认构造函数,C++

有什么方法可以创建基类(例如boost::noncopyable)并继承它,这将禁止编译器为派生类生成默认构造函数,如果它不是由用户(开发者)?例子:classSuperDad{XXX:SuperDad();//=delete?};classChild:YYYSuperDad{public:Child(inta){...}};结果:intmain(){Childa;//compileerrorChildb[7];//compileerrorChildc(13);//OK} 最佳答案 将构造函数设为私有(private)。protec

c++ - 线程内的虚拟调用忽略派生类

在下面的程序中,我有一个线程内的虚拟调用:#include#include#include#include#includeclassA{public:virtual~A(){t.join();}virtualvoidgetname(){std::coutlock{mtx};cv.wait(lock,[this](){returnready_to_print;});getname();};voidset_ready(){std::lock_guardlock{mtx};ready_to_print=true;cv.notify_one();}voidgo(){t=std::thread{

c++ - 调用派生的基类函数

有什么方法可以从虚函数调用基类方法作为派生类,而不是作为基类?示例代码:classA{public:virtualvoida()=0;voidprint(){std::cerr 最佳答案 只需删除decltype:voidprint(){std::cerrthis总是指向其成员函数所在类的一个实例。A中的this总是一个A*。所以typeid(decltype(*this))总是给你A。另一方面,typeid(*this)将查找运行时类型信息,这将确定this确实是一个B(因为A是多态类型)。

c++ - 代码执行派生类方法,但从基类方法获取默认参数

有人可以解释为什么下面代码的结果是“classB::1”吗?为什么派生类的虚方法使用的是基类的默认参数,而不是他自己的?对我来说这很奇怪。提前致谢!代码:#includeusingnamespacestd;classA{public:virtualvoidfunc(inta=1){coutfunc();return0;} 最佳答案 因为默认参数是根据this的静态类型解析的(即变量本身的类型,如A&中的A&a;)。稍微修改您的示例:#includeclassA{public:virtualvoidfunc(inta=1){std::

C++ 从本地类型派生

在某些C++代码中,我使用整数来存储大量变化的数据。为了分析我的程序,我想记录一些变量的某些变化,例如某个值被赋值的频率,以及该赋值冗余的频率(新值与旧值相同)。如果类型是Foo类,我将派生一个新的LoggingFoo并将我的日志记录数据添加到我感兴趣的成员函数中,然后调用父成员函数。我必须更新我的代码才能使用新类型,但只要我最初与typedef保持一致,这就是单行更改。我的问题是我要添加日志记录的变量是一个整数。您不能从C++中的内置类型派生(可以吗?)我的问题是是否有从基本类型(int、float、double等)派生的巧妙方法。解决方案可能是定义一个新类,该类有效地是一个int。

c++ - 具有私有(private)继承的派生类中的友元函数

如果一个Derived类是从一个Base类私有(private)继承的,并且Derived类有一个友元函数f(),那么f()可以访问Derived类和Base类的哪些成员。classBase{public:inta;protected:intb;private:intc;};classDerived:privateBase{voidfriendf(){}public:intd;protected:inte;private:intf;};我理解如果一个类是从基类私有(private)继承的,那么在派生类中一切都是私有(private)的。但为什么在上面的代码中,函数f()可以访问a、b、

C++ - 派生类中的 "Member function not declared"

我在MSVC++2008中遇到问题,其中VS2008抛出此编译错误:errorC2509:'render':memberfunctionnotdeclaredin'PlayerSpriteKasua'现在,令我困惑的是render()已定义,但在继承的类中。类定义是这样的:SpriteBase-InheritedBy->PlayerSpriteBase-InheritedBy->PlayerSpriteKasua因此,SpriteBase.h的简化版本如下:classSpriteBase{public://Variables===============================

c++ - 将从公共(public)接口(interface)派生的类的对象存储在公共(public)容器中的最安全方法是什么?

我想在公共(public)容器中管理从共享接口(interface)类派生的类的一堆对象。为了说明问题,假设我正在构建一个包含不同参与者的游戏。让我们调用接口(interface)IActor并从中派生Enemy和Civilian。现在,我的想法是让我的游戏主循环能够执行此操作://somewhereduringinitstd::vectorActorList;EnemyEvilGuy;CivilianCoolGuy;ActorList.push_back(EvilGuy);ActorList.push_back(CoolGuy);和//mainloopwhile(!done){BOO

c++ - boost::shared_ptr 和分配派生类

假设DerivedClass派生自BaseClass以下是否可行?boost::shared_ptra(newBaseClass());boost::shared_ptrb(newDerivedClass());a=b;关注此question,我知道现在a指向派生,b指向基数(对吗?)此外,现在如果我通过a调用函数,它会调用派生实现吗? 最佳答案 ...a=b;您正在重新分配给a,因此a和b现在都指向DerivedClass对象。BaseClass对象将被销毁,因为此时它的引用计数将为零(由于a被重新分配以指向不同的对象)。由于a现