私はあなたの質問のすべての側面を理解しているかどうかはわかりません。プライベートメンバークラスとは、プライベートメンバー変数を意味しますか?それとも、それは個人的に継承していますか?私は理解できません "これで私の文字列クラスオブジェクトにアクセスしようとすると、それはParentクラスを指しています"。
std :: stringを継承している方が良いでしょう。まず、派生した文字列のメンバーにするには、基本的な実装についてかなり知っておく必要があります。これは配布から配布に変わることがあり、コードは移植できません。とにかく、実際の最適化を利用することはできません。これに本当に良い理由がない限り、あなたはそれをやっていないほうが良いです。
第2に、あなたがやっていることを説明していないように、「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);
}
おそらく、コードサンプル? - とにかく 'void結合(std :: string&body、const std :: string&prefix、const std :: string&suffix);はどうでしょうか。文字列を継承すると値は追加されません。なぜなら、実装のためにパブリックインターフェイスを使用する必要があるからです。 – UncleBens
'str1 + str + str2'? – GManNickG