Я унаследовал от контейнера STL С++ и добавил к нему свои собственные методы. Обоснование было таково, что для клиентов он будет выглядеть обычным списком, но имеет специфические для приложения методы, с которыми они могут быть легко вызваны.
Это отлично работает, но я прочитал множество сообщений о не наследовании от STL. Может ли кто-нибудь дать конкретный совет, как лучше написать код ниже?
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: Спасибо за кучу вдумчивых ответов. Я создам вспомогательные функции вместо этого и теперь не наследую от контейнеров STL.