引用:侯捷
#ifndef __MYSTRING__
#define __MYSTRING__
#endif
1.构造函数:
????????String(const char* cstr=0);?
2.拷贝构造函数:
????????String(const String& str);?
3.赋值运算符重载:
????????String& operator=(const String& str);
4.析构函数:
????????~String();?
5.成员函数返回指向字符串数据的指针:
????????char* get_c_str() const { return m_data; }
????????注意,返回的指针指向的是内部存储,不应该被修改或删除。
6.成员变量:
????????char* m_data;
class String { public: String(const char* cstr=0); String(const String& str); String& operator=(const String& str); ~String(); char* get_c_str() const { return m_data; } private: char* m_data; };
1、构造函数
inline String::String(const char* cstr) { if (cstr) { m_data = new char[strlen(cstr)+1]; strcpy(m_data, cstr); } else { m_data = new char[1]; *m_data = '\0'; } }
2、析构函数?
inline String::~String() { delete[] m_data; }
3、拷贝构造函数
inline String::String(const String& str) { m_data = new char[ strlen(str.m_data) + 1 ]; strcpy(m_data, str.m_data); }
4、 操作符重载 =
inline String& String::operator=(const String& str) { if (this == &str) return *this; delete[] m_data; m_data = new char[ strlen(str.m_data) + 1 ]; strcpy(m_data, str.m_data); return *this; }
?5、操作符重载 <<
ostream& operator<<(ostream& os, const String& str) { os << str.get_c_str(); return os; }
#ifndef __MYSTRING__
#define __MYSTRING__
class String
{
public:
String(const char* cstr=0);
String(const String& str);
String& operator=(const String& str);
~String();
char* get_c_str() const { return m_data; }
private:
char* m_data;
};
#include <cstring>
inline
String::String(const char* cstr)
{
if (cstr) {
m_data = new char[strlen(cstr)+1];
strcpy(m_data, cstr);
}
else {
m_data = new char[1];
*m_data = '\0';
}
}
inline
String::~String()
{
delete[] m_data;
}
inline
String& String::operator=(const String& str)
{
if (this == &str)
return *this;
delete[] m_data;
m_data = new char[ strlen(str.m_data) + 1 ];
strcpy(m_data, str.m_data);
return *this;
}
inline
String::String(const String& str)
{
m_data = new char[ strlen(str.m_data) + 1 ];
strcpy(m_data, str.m_data);
}
#include <iostream>
using namespace std;
ostream& operator<<(ostream& os, const String& str)
{
os << str.get_c_str();
return os;
}
#endif
?