草庐IT

c++ - 派生类的聚合初始化

以下代码无法使用VisualStudio2017或在线GDB进行编译。我希望它能够编译,因为迭代器只是一个具有类型的类,并且它是从publicly继承的。这是不允许的还是在VS2017中不起作用?templatestructGen:publicstd::iterator{Tvalue;};intmain(){Geng=Gen{10};//thisdoesntGeng2=Gen{{},10};//neitherdoesthis}错误是ErrorC2440'initializing':cannotconvertfrom'initializerlist'to'Gen'

c++ - 为什么我不能从派生类中调用基类运算符?

考虑这段代码,它试图从派生类运算符调用基类比较运算符:structBase{protected:int_a;booloperator==(constBase&other)const{return(_a==other._a);}};structDerived:publicBase{booloperator==(constDerived&other)const{returnstatic_cast(*this)==static_cast(other);}};intmain(){Derivedb1,b2;if(b1==b2);}这失败了:main.cpp:25:61:error:'boolBa

c++ - 如何在基于派生类的大小的基构造函数中分配数组?

我有一个类层次结构。基类使用一些可从文件加载(并可在运行时重新加载)的调整参数。每个派生类都可以添加一些额外的参数。我正在寻找一种在基本构造函数中分配大小正确的参数数组的方法,这样我就不必在派生类中取消分配和重新分配。我希望有这样的东西,但它不起作用(参数总是有2个元素):classBase{staticintnParms;virtualintgetNParms(){returnnParms;}float*parameters;public:Base(){parameters=newfloat[this->getNParms()];parameters[0]=globalReloada

c++ - 派生的 C++ 类如何通过基指针克隆自身?

这是我正在尝试做的(这段代码不起作用):classBase{virtualBase*clone(){returnnewBase(this);}virtualvoidID(){printf("BASE");};classDerived:publcBase{virtualBase*clone(){returnnewDerived(this);}virtualvoidID(){printf("DERIVED");}}..Derivedd;Base*bp=&d;Base*bp2=bp->clone();bp2->ID();我喜欢的是看到打印出“DERIVED”...我得到的是“BASE”。我是

c++ - 为什么先调用基类构造函数再调用派生类构造函数

按照c++规则,在定义派生类对象时,先调用基类构造函数初始化基类成员,再初始化派生类构造函数。对于析构函数,规则恢复。我想知道为什么要遵守这条规则。为什么要先基类构造函数,再派生类构造函数?这样做有什么理由吗?或者仅仅因为它是c++的定义。谢谢, 最佳答案 因为派生类的成员可能依赖于基类的成员,所以必须先初始化基类的成员。你不能反驳。 关于c++-为什么先调用基类构造函数再调用派生类构造函数,我们在StackOverflow上找到一个类似的问题: https:

c++ - 不使用 RTTI 缓存不同派生类型的设计模式

假设我有一系列类都实现相同的接口(interface),可能用于调度:classFoo:publicIScheduler{public:Foo(Descriptord):IScheduler(d){}/*methods*/};classBar:publicIScheduler{public:Bar(Descriptord):IScheduler(d){}/*methods*/};现在假设我有一个Scheduler类,您可以要求为给定的描述符启动一个IScheduler派生类。如果它已经存在,您将获得对它的引用。如果不存在,则会创建一个新的。一个假设的调用类似于:Foo&foo=sche

c++ - 派生类中虚函数调用的优化

在派生类中调用虚函数以便编译器可以内联或以其他方式优化调用的最佳方法是什么?例子:classBase{virtualvoidfoo()=0;};classDerived:publicBase{virtualvoidfoo(){...}voidbar(){foo();}};我希望在bar()中对foo()的调用始终调用Derived::foo()。据我了解,调用将导致vtable查找,编译器无法优化它,因为可能有另一个类继承自Derived。我可以显式调用Derived::foo(),但如果Derived中有许多虚函数调用,那会变得冗长。我还感到惊讶的是,我无法在网上找到很多Materi

c++ - 非多态派生类的基类

我有以下类定义:classBaseHandle{/*Lotsofthings*/};classVertexHandle:publicBaseHandle{/*Onlystaticmembersandnon-virtualfunctions,defaultdtor*/};classEdgeHandle:publicBaseHandle{/*Dito*/};classFaceHandle:publicBaseHandle{/*Dito*/};所有类都没有虚函数或基类。派生类仅派生自BaseHandle,不添加任何非静态成员,也不添加非默认dtor。我想将Vertex-、Edge-和Face

c++ - 访问虚拟派生类的成员/方法

这里的例子没有意义,但这基本上是我用Python编写程序的方式,现在我正在用C++重写它。我仍在努力掌握C++中的多重继承,在这里我需要做的是通过C的实例从main访问A::a_print。下面您将看到我在说什么。这可能吗?#includeusingnamespacestd;classA{public:voida_print(constchar*str){cout这是编译错误。test.cpp:Infunction‘intmain()’:test.cpp:6:error:‘voidA::a_print(constchar*)’isinaccessibletest.cpp:21:erro

c++ - 使用基类指针访问派生类成员

我正在用C++制作一个简单的控制台游戏我想知道我是否可以在使用指向基类(“实体”)的指针时访问“entPlayer”类的成员:classEntity{public:voidsetId(intid){Id=id;}intgetId(){returnId;}protected:intId;};classentPlayer:publicEntity{stringName;public:voidsetName(stringname){Name=name;}stringgetName(){returnName;}};Entity*createEntity(stringType){Entity*E