#include #include class String { char *str; int size; int len; // construtor privado String( int s ) { len = 0; size = s; str = new char[size]; } public: String( char * s = "" ); ~String() { delete str; } int lenght() { return len; } // comparacoes int operator==(String& s) { return strcmp(str, s.str) == 0; } int operator< (String& s) { return strcmp(str, s.str) < 0; } int operator<=(String& s) { return strcmp(str, s.str) <= 0; } int operator> (String& s) { return strcmp(str, s.str) > 0; } int operator>=(String& s) { return strcmp(str, s.str) >= 0; } // atribuicao String& operator=(String& s); // acesso aos caracteres: char& operator[](int i); // concatenação String operator+(String& s); // conversao para char* operator const char*() { return str; } }; String::String( char * s ) { len = strlen(s); size = len+1; str = new char[size]; strcpy(str, s); } String& String::operator=(String& s) { if (s.len > size+1) { // realoca area de memoria delete str; size = s.len+1; str = new char[size]; } len = s.len; strcpy(str,s.str); return *this; } String String::operator+(String& s) { String result(len + s.len + 1); strcpy(result.str,str); strcat(result.str,s.str); return result; } char& String::operator[](int i) { if (i<0 || i>=len) { static char lixo; return lixo; } else return str[i]; } int main() { String s1, s2, s3; String s4("quarta string"); String s5 = "string s5"; printf("%s\n", (const char*)s5); // ((const char*)s5)[0] = 'X'; printf("%s\n", (const char*)s5); s1 = "primeira"; s2 = s1 + " " + s4; printf("%s\n", (const char*)s2); return 0; }