代码如下:
简单的实现了构造函数,拷贝构造函数,赋值运算符。
为了便于测试重写了<<运算符。
#pragma once
#pragma warning(disable:4996)
#ifndef _MYSTRING_H_
#define _MYSTRING_H_
#include<string>
class myString
{
public :
myString(const char* ptr = 0);
myString(const myString& mystr);
myString& operator = (const myString& rhs);
char* get_c_str() const { return m_data; }
~myString();
private :
char* m_data;
};
inline
myString::myString(const char* ptr)
{
if (ptr == nullptr)
{
m_data = new char[1];
*m_data = '\0';
}
else
{
m_data = new char[strlen(ptr) + 1];
strcpy(m_data, ptr);
}
}
inline
myString::myString(const myString& mystr)
{
m_data = new char[strlen(mystr.m_data) + 1];
strcpy(m_data, mystr.m_data);
}
inline
myString::~myString()
{
delete[] m_data;
}
inline
myString& myString::operator = (const myString& rhs)
{
if (this == &rhs)
{
return *this;
}
myString tempstr(rhs);
char* tempdata = tempstr.m_data;
tempstr.m_data = m_data;
m_data = tempdata;
return *this;
}
#include<iostream>
using namespace std;
ostream& operator <<(ostream& os, const myString& str)
{
os << str.get_c_str();
return os;
}
#endif
测试代码:
#include"string.h"
#include<iostream>
using namespace std;
int main()
{
myString s1("hello");
myString s2("world");
myString s3(s2);
cout << s3 << endl;
s3 = s1;
cout << s3 << endl;
cout << s2 << endl;
cout << s1 << endl;
return 0;
}
测试结果: