Asitcurrentlystands,thisquestionisnotagoodfitforourQ&Aformat.Weexpectanswerstobesupportedbyfacts,references,orexpertise,butthisquestionwilllikelysolicitdebate,arguments,polling,orextendeddiscussion.Ifyoufeelthatthisquestioncanbeimprovedandpossiblyreopened,visitthehelpcenter提供指导。已关闭8年。我坚信以下设计理念:1
STL为什么要为Allocator预留接口(interface)?以vector为例:template>classvector;因为我们有很多选择来分配内存和构造对象,比如operatornew,delete,new[],delete[],它几乎可以做我们创建对象时需要做的任何事情。那么,为什么像vector这样的STL容器需要一个Allocator接口(interface),如果我们不分配一个,它在大多数情况下都是默认的std::allocator?为什么不直接使用新的表达式呢?如果目的是使用户定义的分配行为成为可能,为什么不让用户提供他们自己定义的operatornew、new[]
我在C++中使用伪接口(interface),即纯抽象类。假设我有三个接口(interface),IFoo、IBar和IQuux。我还有一个Fred类实现了所有这三个:interfaceIFoo{voidfoo(void);}interfaceIBar{voidbar(void);}interfaceIQuux{voidquux(void);}classFred:implementsIFoo,IBar,IQuux{}我想声明一个方法,它接受任何实现IFoo和IBar的对象——例如,Fred就可以。我能想到的唯一编译时方法是定义第三个接口(interface)IFooAndBar来实现这
做一个以人类可读的方式将.NETIL翻译成C++的实验。这里是问题所在:C#允许您解析具有相同方法名称但返回类型不同的多个接口(interface)。C++似乎不支持这一点,但是使用vTable无法解析两个接口(interface)(或者我错了吗?)。我找到了一种使用模板在C++中复制C#方法的方法,但想知道是否有一种方法不需要模板来解决相同的问题?模板很冗长,我如果可能,我不希望将它们用于每种接口(interface)类型。这是C++版本。templateclassIMyInterface{public:short(T::*Foo_IMyInterface)()=0;};templa
在C++中使用这些运算符而不是隐式转换有什么好处?dynamic_cast(expression)reinterpret_cast(expression)static_cast(expression)为什么、在哪里、在什么情况下我们应该使用它们?在OOP中很少使用它们是真的吗? 最佳答案 从您提供的转换列表中,唯一可以用来替代隐式转换的是static_cast。dynamic_cast用于将父类(superclass)向下转换为其子类。这不可能隐式发生,实际上在OOP中并不罕见。static_cast也可以用在这样的转换中,但是它更
在C++中,假设我有一个实现接口(interface)类BaseInterface的类Derived,其中BaseInterface只有纯虚函数和一个虚析构函数:classBaseInterface{public:virtualvoiddoSomething()=0;~BaseInterface(){}};classDerived:publicBaseInterface{public:Derived(){}~Derived(){}protected:virtualvoiddoSomething();private:intx;};Derived类层次结构之外的任何类都不应直接调用Deri
我有一个抽象基类,想在派生类中实现一个函数。为什么我必须在派生类中再次声明函数?classbase{public:virtualintfoo(int)const=0;};classderived:publicbase{public:intfoo(int)const;//Whyisthisrequired?};intderived::foo(intval)const{return2*val;} 最佳答案 考虑派生类定义可能在header中,而其实现可能在源文件中。header通常包含在多个位置(“翻译单元”),每个位置都将独立编译。如
在C++中,我可以动态创建接口(interface)的实现吗(理想情况下绑定(bind)局部范围变量。)不确定如何更好地解释它,所以我将写下我希望代码看起来像什么(大致)://Giventhefollowing:classVisitor{virtualvoidvisit(constData&data)=0;}classDataStore{voidvisitData(Visitor&visitor){/**Invokesvisitorwitheachitemofdata.*/}}//Imagineonewouldwritesomethinglike:voidinSomeFunction(
先继承class还是先继承C++interface会有什么不同吗?例子:classA:publicIAbstract,publicClassB{};classA:publicClassB,publicIAbstract{}; 最佳答案 initializationorder直接基类(即ClassB和IAbstract)将不同。由基类说明符列表中的声明顺序决定。(强调我的)2)Then,directbaseclassesareinitializedinleft-to-rightorderastheyappearinthisclass'
我有一个C++模块需要从其他类获取信息,但不知道这些类。显而易见的方法是使用接口(interface)。让我举个例子。假设我有一个管理图书的图书馆,所有的图书都有自己的特性和功能,而要让图书馆从一本书中获取一个特性或执行一个功能,这本书需要实现一个接口(interface)。像这样:classLibrary{public:voidaddBook(IBook&book);};classIBook{public:stringgetAuthor()=0;stringgetTitle()=0;stringgetISBNCode()=0;size_tgetNofPages()=0;size_tg