我不确定我是否理解你问题的所有方面。当你说私有成员类时,你的意思是私有成员变量吗?还是私人继承?我不明白“当我尝试用它访问我的字符串类对象时,它指向父类”。
你是对的,从 std::string 继承可能不是一个好主意。首先,使其成为派生字符串的成员需要您对底层实现有相当多的了解;这可能会因发行版而异,从而导致代码不可移植。如果您确实使用 std::string 提供的已定义接口编写了可移植的实现,那么您将无法利用任何真正的优化。除非你有充分的理由这样做,否则你最好根本不这样做。
其次,“add”这个名字可能不是最好的,因为它似乎没有描述你正在做的事情。 “环绕”可能是一个更好的名字。
我认为像这样的外部函数可能会更好,避免从字符串继承的整个想法:
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);
}