コンストラクタと代入演算子は継承されないので、親を呼ぶだけでもいいからちゃんと作る。
using namespace std; #include <string> class mystring : public string { public: mystring() : string() {} mystring(const char *str) : string(str) {} mystring(const string &s) : string(s) {} mystring& operator=(const char *str) { string::operator=(str); return *this; } mystring& operator=(const string& s) { string::operator=(s); return *this; } };
#include <iostream> int main() { mystring a = "ほげ"; // string(const char *str)を呼ぶ cout << a << endl; mystring b; // string()を呼ぶ b = "ほげ"; // operator=(const char *str)を呼ぶ cout << b << endl; string s = "ぴよ"; mystring c = s; // string(const string &s)を呼ぶ cout << c << endl; mystring d; // string()を呼ぶ d = s; // operator=(const string& s)を呼ぶ cout << d << endl; return 0; }
文字列以外の情報を持つのであれば、コピーコンストラクタとかもちゃんと作ること。