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

C++中的空类,默认产生哪些类成员函数

2013-07-17 08:13 260 查看
class Empty

{

public:

Empty(); // 缺省构造函数

Empty( const Empty& ); // 拷贝构造函数

~Empty(); // 析构函数

Empty& operator=( const Empty& ); // 赋值运算符

Empty* operator&(); // 取址运算符

const Empty* operator&() const; // 取址运算符 const

};

编写类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.data);
	return *this;    // 得分点:返回本对象的引用
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: