标签:
头文件,函数大都隐式内联了。
#ifndef MYSTRING_H #define MYSTRING_H #include <iostream> #include <string.h> class MyString { friend std::ostream& operator<<(std::ostream &, const MyString &); friend std::istream& operator>>(std::istream &, MyString &); public: MyString() : content(new char[1]) { *content = ‘\0‘; } MyString(const char *str) : content(new char[strlen(str) + 1]) { strcpy_s(content, strlen(content), str); } //MyString(const size_t sz, char &c); MyString(const MyString &ms) : content(new char[ms.size() + 1]) { strcpy_s(content, strlen(content), ms.content); } MyString& operator=(const MyString &); ~MyString() { delete[] content; } void swap(MyString &rhs) { std::swap(content, rhs.content); } size_t size() const { return strlen(content); } const char& operator[](std::size_t n) const { if(n < strlen(content)) return content[n]; } bool operator==(const MyString &rhs) { return strcmp(content, rhs.content); } bool operator!=(const MyString &rhs) { return strcmp(content, rhs.content); } MyString operator+=(const MyString &rhs); MyString operator+(const MyString &rhs) { *this += rhs; return *this; } private: char *content; }; #endif
myString.cpp
#include "myString.h" MyString & MyString::operator=(const MyString &ms) { char *temp = ms.content; delete ms.content; content = temp; return *this; } MyString MyString::operator+=(const MyString &rhs) { if (rhs.content == nullptr) return *this; if (this == &rhs) { MyString copy(*this); return *this += copy; } char *content_old = content; content = new char[strlen(content) + strlen(rhs.content) + 1]; strcpy_s(content, strlen(content), content_old); strcat_s(content, strlen(content), rhs.content); delete[] content_old; return *this; } std::ostream& operator<<(std::ostream &os, const MyString &ms) { os << ms.content << std::endl; return os; } std::istream& operator>>(std::istream &is, MyString &ms) { is >> ms.content; return is; }
main函数测试
#include <iostream> #include "myString.h" using std::cout; using std::cin; using std::endl; int main() { MyString str1; cout << "Enter a string" << endl; cin >> str1; cout << str1 << endl; MyString str2("test"); cout << str2 << endl; cout << str2[2] << endl; return 0; }
标签:
原文地址:http://www.cnblogs.com/fanjinhua/p/4805335.html