1. 重载操作符
inline A& A::operator += (const A& r)
{
this->a = r.a;
return this;
}
2. 带指针的类,构造函数一定要自己写。用深拷贝,而不是浅拷贝。
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& 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;
}
3. 动态创建的空间,一定要手动回收
String s1();
String s2("hello");
String *p = new String("hello");
delete p; // delete的时候才会调用~String
4. 拷贝构造函数在编译器中执行情况:先分配空间,再调用拷贝构造函数
5. 析构函数在编译器中执行过程:先调用析构函数,再释放空间