草庐IT

Inheritance

全部标签

c++ - 使用模板继承调用祖 parent 构造函数

我选择使用模板化继承以避免多重继承和虚拟继承。我的目标是让各种child(4或5代或我无法控制的继承)有一个共同的函数调用,无论他们派生什么。我的解决方案是这样插入一个模板继承:templateclasscommon_call:publicBASE{public:voidfoo(){/*implementationindependentofbase*/}};classchild1:publiccommon_call{};classchild2:publiccommon_call{};这里有调用base的构造函数的问题。类base1和base2(不是我写的)有不同的构造函数,我必须在初始

c++ - 确保参数是控制台的输出流

我正在尝试制作一个用于颜色的流操纵器,以用于输出到控制台。它有效,改变了文本的颜色和背景:std::cout问题出在签名上:std::ostream&FgBlue(std::ostream&);此签名允许派生类,例如std::ostringstream也一样,但是没有办法改变字符串流的颜色。无论是否使用这样的参数调用该函数,都会更改控制台的颜色。因此,我想确保参数符合std::cout的内容,std::wcout等。如果更多std::ostream,我希望它是通用的对象将添加到future的标准中。我尝试了很多涉及std::is_same的事情和std::is_base_of,当前者不

c++ - 通过覆盖加入多个重叠的类?

我想知道以下案例,但我显然缺少足够的术语来在任何地方找到任何答案。让我们从一个常见的案例开始:我总共有3个类。其中2个继承自第三个,应视为特化。现在这3个类仍然是部分抽象的,并且每个都引入了新的纯虚函数,因为这种“类结构”可以针对不同的目的以不同的方式实现。并且这3个类中的每一个都从内部访问纯虚函数,因此它们不能在以后实现。然后是第4类,它继承自第2类,以专门用于第2类的纯虚函数的用途。还有一个第5类,它对第3类做同样的事情。现在还有1级的纯虚函数,需要根据4级和5级专门化。这是我遇到一些问题的地方,我可以想出2种方法来解决这个问题,但我并不真正满意。让第6类继承自第1类,并根据第4类

c++ - 错误 : Member is inaccessible

我有这两个类:classHand{public:intgetTotal();std::vector&getCards();voidadd(Card&card);voidclear();private:std::vectorcards;};classDeck:publicHand{public:voidrePopulate();voidshuffle();voiddeal(Hand&hand);};哪里shuffle()函数声明如下:voidDeck::shuffle(){std::random_shuffle(cards.begin(),cards.end());}但是,这会返回以下错

c++ - 在实现类中访问类的方法

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭9年前。Improvethisquestion我有一个类,假设是a.cpp。在这个类的私有(private)属性中,我有一个指向b.cpp和c.cpp的指针,其中b.cpp是一个虚接口(interface)类,调用d.cpp。此外,在c.cpp的私有(private)属性中,我有一个指向接口(interface)类d.cpp的指针。我想访问b.cpp类中a.cpp类的方法之一。我该怎么做?例子可以是好的,让我在类中给出一些方法classA{p

c++ - 在C++中,不同的游戏实体应该有不同的类吗?或者它应该在一个包含所有行为的类中吗?

我正在开发一个包含许多不同实体的游戏环境。每一个都有一些共同的功能(绘制、更新等),但有时游戏必须根据敌人的类型对它们进行不同的处理。到目前为止,我已经在他们的实例类中编码了敌人的“类型”。所以,我们有这样的情况:classMotionObject{...};classEntity:publicMotionObject{...};classCoin:publicEntity{...};classTextSign:publicEntity{...};classShapeEnemy:publicEntity{...};classAttractor:publicShapeEnemy{...}

c++ - 基于内部类制作模板

我正在尝试创建一个基于其内部定义类之一的模板化类。我认为通过转发声明相关类,我会没事的。但是我不断收到编译时错误,例如:useofundefinedtypeQueryGetCustomerReplyusesundefinedclassQueryGetCustomer当Reply类在QueryCustomer内部时,有什么方法可以在类Reply上模板化QueryGetCustomer,如这段代码所示?classQueryGetCustomer;classQueryGetCustomer::Reply;//error:useofundefinedtypeQueryGetCustomer//

c++ - 重用存储是否开始新对象的生命周期?

这个问题在这里已经有了答案:IsitallowedtowriteaninstanceofDerivedoveraninstanceofBase?(4个答案)关闭8年前。#includestructB{virtualvoidf();voidmutate();virtual~B();};structD1:B{voidf();};structD2:B{voidf();};voidB::mutate(){new(this)D2;//reusesstorage—endsthelifetimeof*thisf();//undefinedbehavior-WHY????...=this;//OK,t

c++ - 在 C++ 中初始化静态 std::map<int, unique_ptr<int>>

这是一个与此post类似的问题.我认为最有前途的答案与模板化静态初始化有关。这是该答案的类(class):templateclasscreate_map{private:std::mapm_map;public:create_map(constT&key,constU&val){m_map[key]=val;}create_map&operator()(constT&key,constU&val){m_map[key]=val;return*this;}operatorstd::map(){returnm_map;}};用法:std::mapmymap=create_map(1,2)(

c++ - 惰性构造 - 虚拟方法与 if-then stub setter/getter

我的问题的背景是我试图创建一个惰性网格结构,其中网格区域仅在需要时实例化,否则它们在查询时返回默认值。稍微归结一下这个问题,考虑一下我的情况的以下模型:structContainer{std::vectordata;floatget(intindexOuter,intindexInner){returndata[indexOuter].get(indexInner);}}我想stubBase::get在某些情况下函数总是返回相同的值,而在其他情况下我想返回某个数组中的值。我想象两种可能的解决方案。第一个解决方案是在Base上使用标志,即structBase{std::vectordat