Rzecz w tym, że nie działa. Ale gdy używam std::string, to działa.
class String {
private:
int size;
char *buffer;
public:
String() {
size = 0;
buffer = new char[size+1];
buffer[0] = '\0';
}
String(const String &str) {
size = str.size;
buffer = new char[size+1];
strcpy(buffer, str.buffer);
}
String(const char *str) {
size = strlen(str);
buffer = new char[size+1];
strcpy(buffer, str);
}
inline String operator+(const String &str) const {
char buf[size+str.size+1];
strcpy(buf, buffer);
strcat(buf, str.buffer);
return String(buf);
}
inline String operator+(const char *str) const {
char buf[size+strlen(str)+1];
strcpy(buf, buffer);
strcat(buf, str);
return String(buf);
}
inline String &operator+=(const String &str) {
size += str.size;
char *buf = new char[size+1];
strcpy(buf, buffer);
strcat(buf, str.buffer);
delete[] buffer;
buffer = buf;
return *this;
}
inline String &operator+=(const char *str) {
size += strlen(str);
char *buf = new char[size+1];
strcpy(buf, buffer);
strcat(buf, str);
delete[] buffer;
buffer = buf;
return *this;
}
inline char operator[](int index) const {
return buffer[index];
}
inline char &operator[](int index) {
return buffer[index];
}
char *data() {
return buffer;
}
~String() {
delete[] buffer;
}
};