Я не уверен, что понимаю все аспекты вашего вопроса.Когда вы говорите, закрытый член класса, вы имеете в виду частную переменную члена?Или это частное наследство?Я не понимаю, «когда я пытаюсь получить доступ к моему объекту класса string с помощью этого, он указывает на родительский класс».
Вы правы, наследование от std :: string, вероятно, не очень хорошая идея,Прежде всего, для того, чтобы сделать его членом производной строки, вы должны знать достаточно много о базовой реализации;это может измениться от распределения к распределению, делая код непереносимым.Если вы напишите реализацию, которая является переносимой, используя уже определенный интерфейс, предоставляемый std :: string, вы все равно не сможете воспользоваться какой-либо реальной оптимизацией.Если у вас нет действительно веской причины для этого, вам лучше вообще этого не делать.
Во-вторых, название «добавить», вероятно, не самое лучшее, так как оно не описывает то, что выделаешь."Surround" может быть лучшим именем.
Я думаю, что внешняя функция, как это может быть лучше, избегая всей идеи наследования от строки:
void surround(std::string &orig, std::string const &pre, std::string const &post) {
orig = pre + orig + post;
}
или, если вы хотите более высокуюпроизводительность, сделайте что-то вроде этого:
void surround(std::string &orig, std::string const &pre, std::string const &post) {
std::string str;
str.reserve(orig.size() + pre.size() + post.size());
str.insert(str.end(), pre.begin(), pre.end());
str.insert(str.end(), orig.begin(), orig.end());
str.insert(str.end(), post.begin(), post.end());
std::swap(str, orig);
}