草庐IT

c++ - 在派生类型的对象上从基类调用虚方法

classBase{public:virtualvoidfoo()const{std::cout尝试过转换和函数指针,但我做不到。是否有可能打败虚拟机制(只是想知道是否可能)? 最佳答案 要显式调用Base中定义的函数foo(),请使用:d.Base::foo(); 关于c++-在派生类型的对象上从基类调用虚方法,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2787756/

c++ - 如何从基类派生 ATL COM 类?

“ATL简单对象”向导不提供指定新类派生自现有组件类及其接口(interface)的方法。在VisualStudio2008中,我如何创建一个从现有类派生的新ATLCOM类(即Base实现IBase,我想创建一个新的Derived派生自实现IDerived的Base的类,其中IDerived派生自IBase。)更新:听起来很简单,但是一个向导生成的ATL类最多有六个基类,一个COM映射和一个连接点映射。这些基类和映射中的哪些应该在派生类中重复?如果在派生类中重复映射,它们应该包含基类映射的内容还是仅包含附加项?基类的顺序重要吗?FinalConstruct()和FinalRelease

c++ - 我应该把空基类放在哪里?

当其中一个为空而另一个不为空时,我列出基类的顺序是否重要?classFoo:normal_class,empty_class{...};classFoo:empty_class,normal_class{...};顺序是否影响编译器应用空基类优化的能力? 最佳答案 我认为这不重要-尽管我倾向于尝试先放置一个空底座。在boost站点上有一个关于多个空碱基的有趣注释:http://www.boost.org/doc/libs/1_38_0/libs/utility/operators.htm#old_lib_note

c++ - const 基类的作用

这个问题在这里已经有了答案:Isthereanydifferencebetween"T"and"constT"intemplateparameter?(3个答案)constintemplateargument[duplicate](2个答案)关闭9年前。以下构造的实际效果是什么:classBase{/*...*/};templateclassDerived:publicT{/*...*/};intmain(){Derivedd;//...}Derived类是否只能访问Base接口(interface)的const部分?我的第一个测试表明实际上根本没有效果。为什么?谢谢!

c++ - 重载来自不同基类的同名虚函数。可能吗?

这个问题在这里已经有了答案:C++virtualoverridefunctionswithsamename(4个答案)关闭9年前。标题可能令人困惑。假设我们有以下设置;classA{public:virtualvoidfn()=0;};classB{public:virtualintfn(){};};classC:publicA,publicB{};有什么方法可以在classC中定义A::fn吗?

c++ - 为什么 C 样式转换允许您转换为私有(private)基类?

这个问题在这里已经有了答案:CanIcastaderivedclasstoaprivatebaseclass,usingC-stylecast?(3个答案)关闭6年前。假设我们有这段代码classA{public:A():x(1){}virtual~A(){}intx;};classB{public:B():y(2){}virtual~B(){}voidg(){cout(this);p->g();}};intmain(){Cc;((B*)&c)->g();return0;}main函数中的C风格转换无法用C++转换(static_cast、dynamic_cast、reinterpre

c++ - 基类有不完整的类型错误

Baseclasshasincompletetype这个错误到底是什么意思,我该如何解决?我曾尝试通过在我的EntityPhysicsheader中执行classEntity来向前声明该类,但它没有用。这是我的Entity.h#ifndef__Game__Entity__#define__Game__Entity__#include#include#include"OGRE/Ogre.h"#include"OgreInit.h"classEntity{public:Entity(std::stringentityId,std::stringmesh,Ogre::Vector3posit

c++ - 有什么方法可以在抽象基类中使用模板函数?

我正在尝试制作一个配置管理器类,它可以通过std::string存储任意对象。我对我的接口(interface)(抽象基类)的最初想法是这样的(当然这是非常不完整的)classConfigurationManager{public:staticboost::shared_ptrcreate();templatevirtualTgetOption(conststd::string&name)=0;};但后来我的编译器指出模板不能是虚拟的(然后我意识到无论如何我都不能导出模板)。我将在内部使用boost::any(几乎是运行时检查无效*),但我不想在我的界面中公开boost::any。解决

c++ - 如何将派生类的 shared_ptr vector 转换为基类的 shared_ptr vector

classInterface{};classClass:publicInterface{};classFoo{public:std::vector>&GetInterfaces(){return*(std::vector>*)(&m_data);//returnm_data;}private:std::vector>m_data;};这行得通,但又丑又吓人。有更好/更安全的方法吗?我不想做m_data类型std::vector>因为模块Foo完全属于Class作品的,Interface(和Foo::GetInterfaces())被实现为与一个单独的模块交互,该模块应该只知道Inter

c++ - 通过基类虚函数获取派生类型

我试图通过基类虚函数获取对象的派生类型。我写了这个,它不编译:structbase{virtualbase&get_this(){return*this;}};structderived:base{virtualderived&get_this()override{return*this;}voidfn();};intmain(){base*pd=newderived();derived&x=pd->get_this();/*ERROR*/x.fn();return0;}...给我一个错误:我无法从base初始化derived&。由于get_this是虚拟的,为什么pd->get_th