string.h
#ifndef INTERVIEW_STRING_H
#define INTERVIEW_STRING_H
#include <iostream>
namespace yuy {
class string {
public:
string(const char *cstr = nullptr);
~string();
string(const string &str);
string &operator=(const string &str);
string(string &&str);
string &operator=(string &&str);
char *c_str() const;
friend std::ostream &operator<<(std::ostream &os, const string &str);
private:
char *data_;
};
}
#endif
string.cpp
#include "string.h"
#include <cstring>
namespace yuy {
string::string(const char *cstr) {
if(cstr != nullptr) {
data_ = new char[strlen(cstr) + 1];
strcpy(data_, cstr);
} else {
data_ = new char[1];
*data_ = '\0';
}
}
string::~string() {
delete[] data_;
}
string::string(const string &str) {
data_ = new char[strlen(str.data_) + 1];
strcpy(data_, str.data_);
}
string &string::operator=(const string &str) {
if(this != &str) {
delete[] data_;
data_ = new char[strlen(str.data_) + 1];
strcpy(data_, str.data_);
}
return *this;
}
string::string(string &&str) {
data_ = str.data_;
str.data_ = nullptr;
}
string &string::operator=(string &&str) {
if(this != &str) {
delete[] data_;
data_ = str.data_;
str.data_ = nullptr;
}
return *this;
}
char *string::c_str() const {
return data_;
}
std::ostream &operator<<(std::ostream &os, const string &str) {
os << str.data_;
return os;
}
}