如何用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);
}
已知类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);
}
相关文章推荐
- 如何用c语言实现CString的构造函数、析构函数和赋值函数?
- 实现C++基本内容之构造函数、析构函数和赋值函数
- 实现C++类中默认的四个方法默认构造函数、析构函数、拷贝构造函数、赋值函数
- 自主编程实现String类的构造函数,析构函数,拷贝构造函数,赋值函数
- 实现MyString类--构造函数、拷贝构造函数、析构函数、赋值函数、操作符重载函数
- 【C/C++】实现一个string类的构造函数、析构函数和赋值函数
- 类String的 构造函数、拷贝构造函数、析构函数、赋值函数实现
- 编写一个String类,实现其构造函数、析构函数以及赋值函数
- 字符串strcpy函数的实现,以及字符串string的实现,编写构造函数,拷贝构造函数,赋值函数,析构函数
- 如何正确编写类String的构造函数、析构函数和赋值函数
- 实现类的构造函数,析构函数和赋值函数
- C++实现一个类并包含构造函数,拷贝构造函数,赋值函数,析构函数
- 构造函数,拷贝构造函数,赋值函数,析构函数
- 《高质量C++/C编程指南》第9章:类的构造函数、析构函数与赋值函数
- 析构函数、复制构造函数、赋值函数什么时候必须显式定义
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- 编写类 String 的构造函数、析构函数和赋值函数
- 类String 的构造函数、析构函数和赋值函数
- C语言如何"实现"面向对象?
- C++中构造函数,复制构造函数和赋值函数的区别和实现