KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I inherited from C++ STL container and add my own methods to it. The rationale was such that to the clients, it will look act a regular list, yet has application-specific methods they can readily be called. This works fine, but I have read numerous posts about not inheriting from STL. Can someone provide a concrete advice of how I might write the code below in a better way? class Item { int a; int b; int c; int SpecialB() { return a * b + c; } }; class ItemList : public std::vector<Item> { int MaxA() { if( this->empty() ) throw; int maxA = (*this)[0].a; for( int idx = 1; idx < this->size(); idx++ ) { if( (*this)[idx].a > maxA ) { maxA = (*this)[idx].a; } } return maxA; } int SpecialB() { if( this->empty() ) throw; int specialB = (*this)[0].SpecialB(); for( int idx = 1; idx < this->size(); idx++ ) { if( (*this)[idx].SpecialB() < specialB ) { specialB -= (*this)[idx].c; } } return specialB; } int AvgC() { if( this->empty() ) throw; int cSum = 0; for( int idx = 0; idx < this->size(); idx++ ) { cSum += (*this)[idx].c; } return cSum / this->size(); // average } }; EDIT : Thanks for a bunch of thoughtful answers. I will create helper functions instead and from now on will never inherit from STL containers.
Tags (comma-separated)
Save Edits
Cancel