background image

private:
char *m_data; // 用于保存字符串
};
尝试写出类的成员函数实现。
答案:
String::String(const char *str)
{
if ( str == NULL ) //strlen 在参数为 NULL 时会抛异常才会有这步判断
{
m_data = new char[1] ;
m_data[0] = '\0' ;//*m_data= '\0'
}
else
{
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
}

//拷贝构造函数
String::String(const String &other)
{
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data,other.m_data);
}
//赋值函数
String& String::operator =(const String &rhs)
{
//检查自我赋值
if ( this == &rhs)  return *this ;
delete []m_data; //释放原有的内存空间
m_data = new char[strlen(rhs.m_data) + 1];//分配新的内存空间
strcpy(m_data,rhs.m_data);//复制内容
return *this ;//返回本对象的引用
}
String::~String()
{
delete []m_data ;//由于 m_data 是内部数据类型,也可以写成 delete m_data
}
①链表反转

 

比如一个链表是这样的: 1->2->3->4->5 通过反转后成为 5->4->3->2->1。
最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的
下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。
源代码如下:
struct linka {