您的位置:首页 > 编程语言 > C语言/C++

如何用c语言实现CString的构造函数、析构函数和赋值函数?

2009-12-09 16:59 477 查看
编写类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的上述4个函数。

String::String(const char*str=NULL)

{

if(str == NULL)

{

Init();

return ;

}

int nLen = SafeStrlen(str) + 1;

if (nLen != 1)

{

m_data = new char[nLen];

memset(m_data, 0, nLen);

memcpy(m_data, lpsz, nLen*sizeof(char));

}

else Init();

}

String::String(const String&other)

{

int len = SafeStrlen(other.m_data) + 1;

m_data = new char[len];

memset(m_data, 0, len);

memcpy(m_data, other.m_data, len);

}

String::~String()

// free any attached data

{

if(m_data)

delete []m_data;

}

const String& String::operator=(const String& other)

{

char* pOldData = m_data;

int len = SafeStrlen(other.m_data) + 1;

if( len != 1 )

{

m_data = new char[len];

memset(m_data, 0, len);

memcpy(m_data, other.m_data, len);

if(pOldData) delete[]pOldData;

return *this;

}

if(pOldData) delete[]pOldData;

Init();

return *this;

}

void String::Init()

{

m_data = new char[1];

*m_data = '/0';

}

int String::SafeStrlen(LPCTSTR lpsz)

{

return (lpsz == NULL) ? 0 : strlen(lpsz);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐