Расскажите, почему наследование здесь 'misused'
От: _Winnie Россия C++.freerun
Дата: 12.01.06 17:48
Оценка:
предположим, я часто делаю какую-то операцию с std::string, и хотел бы к нему добавить методы.
Можно это сделать так:

struct my_string: public std::string //забудем пока про basic_string<C, T, A>, вопрос про misused 
{
//повторяю конструкторы std::string
...
//добавляю свои 'удобные методы'
};

template <class T>
struct my_vector: std::vector<T>
{
};


какие причины есть считать это злом? Нутром чую, что это путь в ад, но пока не вижу конкретных плохих вещей. Едиственное что, вижу проблему когда кто-то захочет вдруг передать std::string в функцию, которая принимает my_string.
Все книжки пишут, естли можете сделать операцию на объектом свободной функцией, а не методом, то лучше методом. Я с этим согласен.
Хотелось бы точно понять, какие грабли есть вот в таком наследовании. (Предположим, что в проекте используется только один такой наследник, и других библиотек, которые так расширили строки, нет)
Собственно — это вторая проблема — когда каждая либа начиная клепать свой такой свой string. предположим, что она одна и основная в проекте.
Перечислите, пожалуйста, как можно больше бяк, почему такое наследование некошерно. ^_^

Спасибо.

PS. Наверное, я не прочитал какую-то книжку. Но протелепатировал себе мысль из неё
Правильно работающая программа — просто частный случай Undefined Behavior
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.