C++ 列表及其第一个组件的继承
我希望有一个类(这是C++),它从加权组件列表继承,并从列表的组件类型继承,这样我就可以直接访问第一个成员。我不确定这是怎么可能的,但基本上我希望能够做到的是:C++ 列表及其第一个组件的继承,c++,multiple-inheritance,C++,Multiple Inheritance,我希望有一个类(这是C++),它从加权组件列表继承,并从列表的组件类型继承,这样我就可以直接访问第一个成员。我不确定这是怎么可能的,但基本上我希望能够做到的是: class Component; class WeightedComponent: public pair<Component,float>; class WeightedList : public list<WeightedComponent> : public Component; 那么,有没有一种方
class Component;
class WeightedComponent: public pair<Component,float>;
class WeightedList : public list<WeightedComponent> : public Component;
那么,有没有一种方法可以设置我的WeightedList类,让它的基本组件对象始终是(或指向)它的基本列表。begin()。第一个对象,无需在整个代码中手动干预,只要列表被清除、重新填充、删除、重新排序,等等?这不能按照您建议的方式完成:如果您创建一个新的
加权列表
,它将始终是一个新的、唯一的对象,不能与列表的(单独的)第一个元素“相同”。还考虑一个空列表的情况,<<代码>组件>代码> <代码>权重列表>代码>行为>
一种解决方案是,实现一个单独的first\u component
函数,返回对第一个组件的引用,这样您就可以像
Component& first = weightedList.first_component();
first.doSomethingWithFirstComponent();
还可以将组件
实现为接口,即纯虚拟方法的集合:
class Component {
public:
virtual void method1() = 0;
virtual void method2() = 0;
};
然后将当前组件设计为具体的子类
class ComponentImpl : public Component {
/// Implement Component's methods
};
然后还可以在加权列表
类中实现组件
,并通过将方法委托给第一个元素来实现这些方法
class WeightedList : public list<Component,float>, public Component {
public:
void method1() {
this->front().get<0>().method1();
}
// etc.
};
类权重列表:公共列表,公共组件{
公众:
void method1(){
这->front().get().method1();
}
//等等。
};
类从类继承,但不能从列表继承。我认为你需要先阅读C++语言,了解继承和多态性。然后,如果父函数和数据被声明为受保护或私有,则子类可以访问它们。@Merlin069,实际上,您可以继承类std::list或std::pair(但这不是一个好的做法);然而,我相信这不是asker想要做的。@Merlin069我确实以多项式的等式所暗示的方式从列表中继承。我稍微编辑了我的原始问题,以澄清我需要能够做什么。对不起,我在评论时没有想到STL。我想我在Qt容器上花的时间太多了。谢谢你纠正我-这不是我最美好的时刻!非常感谢您的回答和其他建议。
class WeightedList : public list<Component,float>, public Component {
public:
void method1() {
this->front().get<0>().method1();
}
// etc.
};