#ifndef String_h #define String_h class String { public: typedef long long length_t; private: char* str; length_t len; public: // Default constructor and conversion constructor /*implicit*/ String(const char* str = ""); // Conversion constructor explicit String(length_t capacity); // Copy constructor String(const String& other); // Assignment operator const String& operator=(const String& other); // Destructor (dtor) ~String(); inline length_t length() const { return len; } inline const char* c_str() const { return str; } inline char& operator[](length_t i) { return str[i]; } inline const char& operator[](length_t i) const { return str[i]; } String operator()(length_t pos, length_t len = -1) const; // Conversion operator // inline operator const char*() const { return str; } friend String operator+(const String& s1, const String& s2); String operator+(char ch) const; }; String operator+(const String& s1, const String& s2); #include std::ostream& operator<<(std::ostream& output, const String& str); #endif