cpp_go_hdc review2

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;
};
inline
String::String(const char* cstr = 0)
{
     
	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(const String& str)
{
     
	m_data = new char[ strlen(str.m_data) + 1]
	strcpy(m_data, str.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;
}

1.思考字符串需要什么数据–创建指针
2.思考准备哪些函数开放给外界调用
①创建构造函数 接受一个指针
②创建拷贝构造函数 传递reference
③拷贝赋值 (来源端拷贝到目的端)
④创建析构函数
⑤创建辅助函数 为了字符串console out
3.设计构造函数 inline function
①分配足够空间放初值(new一个空间)
②若未传进初值或传进初值为0
4.设计析构函数 释放空间 inline function
5.设计拷贝构造函数
①来源端参数str
②目的端new一个足够大的内存空间
③将初值拷贝到目的端
6. 设计拷贝赋值函数 (为成员函数)
①写出参数列
②标明返回类型
③删除目的端空间
④重新分配一个足够大的空间
⑤把来源端拷贝到目的端
⑥赋值完毕 return 返回的值实质上是以初始化的形式赋给调用点的临时变量 即
在函数的调用点存在一个临时变量,我们不必在乎这个变量类型 因为系统会用return的值初始化这个临时变量
⑦注意检查拷贝赋值是否为自我赋值(来源端和目的端相同)

你可能感兴趣的:(cpp_go_hdc review2)