std::string
не предназначен для наследования. Он не имеет каких-либо виртуальных функций (даже деструктора!), Поэтому вы не можете ничего переопределить. Он также не имеет защищенного интерфейса, поэтому вы ничего не получите от подклассов, чего не могли бы получить, создав некоторые автономные служебные функции, которые принимают std::string
.
Имейте в виду, что большинство реализаций STL ожидают, что вы будете использовать std::string
с семантикой копирования, а не со ссылочной семантикой, и это делает случай добавления унаследованных полей или переопределяющих функций еще слабее.
Если вы действительно хотите что-то наподобие std::string
с дополнительными функциями, вы можете рассмотреть возможность использования композиции вместо наследования, но это тоже не очень хорошо. Вам не нужно беспокоиться о том, что деструктор std::string
не будет вызван должным образом, но в конечном итоге вам придется обернуть множество нужных вам методов из std::string
, что утомительно. Кроме того, ваши служебные функции будут работать с MyString только тогда, когда большая часть кода будет ожидать std::string
, поэтому он не очень многократно используется.
Вам лучше сделать некоторые служебные функции, которые принимают std::string
. Или, если std::string
не обеспечивает то, что вам нужно, вы должны использовать другую строковую реализацию, которая соответствует вашим потребностям. Вот некоторые возможности, которые приходят на ум: