±àдÀàStringµÄ¹¹Ô캯Êý¡¢Îö¹¹º¯ÊýºÍ¸³Öµº¯Êý£¬ÒÑÖªÀàStringµÄÔÐÍΪ£º
class String
{
¡¡public:
¡¡¡¡String(const char *str = NULL); // ÆÕͨ¹¹Ô캯Êý
¡¡¡¡String(const String &other); // ¿½±´¹¹Ô캯Êý
¡¡¡¡~ String(void); // Îö¹¹º¯Êý
¡¡¡¡String & operate =(const String &other); // ¸³Öµº¯Êý
¡¡private:
¡¡¡¡char *m_data; // ÓÃÓÚ±£´æ×Ö·û´®
};
½â´ð£º
//ÆÕͨ¹¹Ô캯Êý
String::String(const char *str)
{
¡¡if(str==NULL)
¡¡{
¡¡¡¡m_data = new char[1]; // µÃ·Öµã£º¶Ô¿Õ×Ö·û´®×Ô¶¯ÉêÇë´æ·Å½áÊø±êÖ¾¡¯\0¡äµÄ¿Õ
¡¡¡¡//¼Ó·Öµã£º¶Ôm_data¼ÓNULL ÅжÏ
¡¡¡¡*m_data = ¡®\0¡ä;
¡¡}
¡¡else
¡¡{
¡¡¡¡int length = strlen(str);
¡¡¡¡m_data = new char[length+1]; // ÈôÄÜ¼Ó NULL ÅжÏÔò¸üºÃ
¡¡¡¡strcpy(m_data, str);
¡¡}
}
// StringµÄÎö¹¹º¯Êý
String::~String(void)
{
¡¡delete [] m_data; // »òdelete m_data;
}
//¿½±´¹¹Ô캯Êý
String::String(const String &other) ¡¡¡¡¡¡// µÃ·Öµã£ºÊäÈë²ÎÊýΪconstÐÍ
{
¡¡int length = strlen(other.m_data);
¡¡m_data = new char[length+1]; ¡¡¡¡¡¡¡¡//¼Ó·Öµã£º¶Ôm_data¼ÓNULL ÅжÏ
¡¡strcpy(m_data, other.m_data);
}
//¸³Öµº¯Êý
String & String::operate =(const String &other) // µÃ·Öµã£ºÊäÈë²ÎÊýΪconstÐÍ
{
¡¡if(this == &other) ¡¡¡¡//µÃ·Öµã£º¼ì²é×Ô¸³Öµ
¡¡¡¡return *this;
¡¡delete [] m_data; ¡¡¡¡¡¡¡¡//µÃ·Öµã£ºÊÍ·ÅÔÓеÄÄÚ´æ×ÊÔ´
¡¡int length = strlen( other.m_data );
¡¡m_data = new char[length+1]; ¡¡//¼Ó·Öµã£º¶Ôm_data¼ÓNULL ÅжÏ
¡¡strcpy( m_data, other.m_data );
¡¡return *this; ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//µÃ·Öµã£º·µ»Ø±¾¶ÔÏóµÄÒýÓÃ
}