本文介绍了继承矢量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我想要一个类似于类的向量,带有一些额外的功能 (化妆品一个)。所以我可以继承一个向量类来添加额外的 函数,例如, CorresVector:public vector< Corres> { public: void addCorres(Corres& c); //它只做push_back 函数。 } 或者我需要做一个组合来做(即存储向量内部 Corresvector&授权必要的功能)。我想知道 ,在这种情况下(继承)是否允许容器,即 当CorresVector被破坏时容器将被释放(即 vector有一个被调用的虚拟析构函数?) abir 解决方案 toton写道: 我想要一个类似于类的向量功能性 (化妆品一件)。所以我可以继承一个向量类来添加额外的 函数,例如, CorresVector:public vector< Corres> { public: void addCorres(Corres& c); //它只做push_back 函数。 } 或者我需要做一个组合来做(即存储向量内部 Corresvector&授权必要的功能)。我想知道 ,在这种情况下(继承)是否允许容器,即 当CorresVector被破坏时容器将被释放(即 vector有一个虚拟析构函数被调用?) 否,vector没有虚析构函数。它没有任何 虚拟功能。你可以从一个向量继承但你不能这样做 多态。 toton写道: 我想要一个带有一些额外功能的类矢量 (化妆品一个)。所以我可以继承一个向量类来添加额外的 函数,例如, CorresVector:public vector< Corres> { public: void addCorres(Corres& c); //它只做push_back 函数。 } 或者我需要做一个组合来做(即存储向量内部 Corresvector&授权必要的功能)。我想知道 ,在这种情况下(继承)是否允许容器,即 当CorresVector被破坏时容器将被释放(即 vector有一个虚拟的析构函数被调用吗?) abir 你好,abir, std :: vector没有虚拟析构函数。 但如果你通过指针删除CorresVector它只需要一个 到基类。 关于它是否是正确的问题方法,使用谷歌和你 会发现很多不同的意见(参见例如 http://www.thescripts.com/forum/thread63869.html) 。 干杯, 弗兰克 Frank写道: toton写道: 我想要一个带有一些附加功能的类矢量 (化妆品一)。所以我可以继承一个向量类来添加额外的 函数,例如, CorresVector:public vector< Corres> { public: void addCorres(Corres& c); //它只做push_back 函数。 } 或者我需要做一个组合来做(即存储向量内部 Corresvector&授权必要的功能)。我想知道 ,在这种情况下(继承)是否允许容器,即 当CorresVector被破坏时容器将被释放(即 vector有一个虚拟的析构函数被调用?) abir 你好, std :: vector没有虚拟析构函数。 但如果你通过指针删除CorresVector它只需要一个 到基类。 关于它是否是正确的问题方法,使用谷歌和你 会发现很多不同的意见(参见例如 http://www.thescripts.com/forum/thread63869.html)。 我有一个存储CorresVector的Session类,而不是指针或 引用。因此,Session类析构函数将自动调用 CorresVector。因此,没有变形行为。我希望因此不会有任何内存泄漏 。 否则委托包括容器在内的很多方法都很痛苦 traits&迭代器。 宗教绝对是一个问题,如果我的班级与向量的差异很大,或者 ,可以考虑稍后委托(或 受保护的继承)任何其他误用问题来了(我知道Java Stack继承自 Vector!)。 干杯, Frank Hi,I want to have a vector like class with some additional functionality(cosmetic one). So can I inherit a vector class to add the additionfunction like,CorresVector : public vector<Corres>{public:void addCorres(Corres& c); //it do little more than push_backfunction.}Or I need to do a composition to do it (i.e storing the vector insideCorresvector & delegating the necessary functionality). I want to knowthat whether in this case (inheriting) is allowed for containers, i.ewill the container will get freed when CorresVector gets destoryed (i.evector has a virtual destructor which gets called?)abir 解决方案toton wrote:Hi, I want to have a vector like class with some additional functionality(cosmetic one). So can I inherit a vector class to add the additionfunction like,CorresVector : public vector<Corres>{public: void addCorres(Corres& c); //it do little more than push_backfunction.}Or I need to do a composition to do it (i.e storing the vector insideCorresvector & delegating the necessary functionality). I want to knowthat whether in this case (inheriting) is allowed for containers, i.ewill the container will get freed when CorresVector gets destoryed (i.evector has a virtual destructor which gets called?)No, vector does not have a virtual destructor. It doesn''t have anyvirtual functions. You can inherit from a vector but you can''t do sopolymorphically. toton wrote:Hi, I want to have a vector like class with some additional functionality(cosmetic one). So can I inherit a vector class to add the additionfunction like,CorresVector : public vector<Corres>{public: void addCorres(Corres& c); //it do little more than push_backfunction.}Or I need to do a composition to do it (i.e storing the vector insideCorresvector & delegating the necessary functionality). I want to knowthat whether in this case (inheriting) is allowed for containers, i.ewill the container will get freed when CorresVector gets destoryed (i.evector has a virtual destructor which gets called?)abirHi abir,std::vector does not have a virtual destructor.But it would only need one, if you delete a CorresVector through a pointerto a base class.As for the question whether it is the "right" approach, use google and youwill find a lot of different opinions (see e.g. http://www.thescripts.com/forum/thread63869.html).Cheers,FrankFrank wrote:toton wrote: Hi, I want to have a vector like class with some additional functionality (cosmetic one). So can I inherit a vector class to add the addition function like, CorresVector : public vector<Corres>{ public: void addCorres(Corres& c); //it do little more than push_back function. } Or I need to do a composition to do it (i.e storing the vector inside Corresvector & delegating the necessary functionality). I want to know that whether in this case (inheriting) is allowed for containers, i.e will the container will get freed when CorresVector gets destoryed (i.e vector has a virtual destructor which gets called?) abirHi abir,std::vector does not have a virtual destructor.But it would only need one, if you delete a CorresVector through a pointerto a base class.As for the question whether it is the "right" approach, use google and youwill find a lot of different opinions (see e.g. http://www.thescripts.com/forum/thread63869.html).I have a Session class which stores the CorresVector, not a pointer orreference. and Session class destructor will thus automatically callCorresVector. Hence there is no ploymorphic behavior. I hope there willnot be any memory leak therefore.Otherwise it is pain to delegate a lot of method including containertraits & iterators.Religion is definitely a question, may think later of delegating (orprotected inheritence) if my class sufficiently differs from vector orany other misuse question comes (I know Java Stack is inherited fromVector ! ).Cheers,Frank 这篇关于继承矢量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
09-05 09:46