编写类 String 的构造函数、析构函数和赋值函数
来源:互联网 发布:网络用语 0514什么意思 编辑:程序博客网 时间:2024/06/07 15:15
已知 String 类的原型为:
class String{public: String (const char* str = NULL); // 普通构造函数 String (const String &other); // 拷贝构造函数 ~String(void); // 析构函数 String & operater = (const String &other); // 赋值函数private: char* m_data;};
编写 String 类的以上4个函数。
实现构造函数就是根据传入的字符串的长度申请一段内存,存储这个传入的字符串的值,当字符串为空时,字符串的长度为1,内容为 '\0';析构函数就是直接释放成员指针 m_data 所指向的内存空间;因为类 string 含有成员指针变量,所以拷贝构造函数要实现的是深拷贝;实现赋值运算符时要注意以下几点:
- 判断是不是对象自身赋值,是则直接返回当前对象。
- 释放原有的指针指向的内存资源。
- 申请新的内存空间,用源对象初始化这段空间。
- 返回本对象的引用。
SString::SString(const char* str) // 普通构造函数{ int length = strlen(str); m_data = new char[length + 1]; strcpy(m_data, str);}SString::SString(const SString &other) // 拷贝构造函数{ int length = strlen(other.m_data); m_data = new char[length + 1]; strcpy(m_data, other.m_data);}SString::~SString(void) // 析构函数{ delete[] m_data; }SString & SString::operater = (const SString &other) // 赋值函数{ if (this == &other) // 检查自赋值 return *this; if (m_data != NULL) // 释放原有的内存资源 delete[] m_data; int length = strlen(other.m_data); m_data = new char[length + 1]; if (m_data != NULL) strcpy(m_data, other.m_data); return *this;}
拷贝构造函数和赋值函数很相似,两者都可以用同一个类对象初始化另一个对象;但是,两者在初始化方式上还是有不同之处。
- 拷贝构造函数生成新的类对象,而赋值运算不能。
- 由于拷贝构造函数是直接构造一个新的类对象,所以在初始化这个对象之前不用检验原对象是否和新建对象相同。而赋值运算则需要这个操作;此外,如果赋值运算中原来的对象有内存分配,要先把内存释放掉。
- 编写类String的构造函数、拷贝构造函数、析构函数和赋值函数
- 编写类String 的构造函数、拷贝构造函数、析构函数和赋值函数
- 网易游戏笔试题:编写string类的构造函数、拷贝构造函数、赋值构造函数和析构函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数,析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String 的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 如何正确编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String 的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 搞懂的问题(1)
- jpa之eclipselink2.1之myeclipse10.0环境下配置实现
- 两个指针相减的结果
- 阿里巴巴2014年校园招聘试题解答
- 如何通过函数指针调用函数(实现代码)
- 编写类 String 的构造函数、析构函数和赋值函数
- ARM的字对齐问题总结
- CMU论文—Hadoop’s Adolescence(0-3页)
- Matlab中求解矩阵的奇异值
- hdu 1213
- TJU Vacation
- 控制listview大图标之间的间距
- 常见的ARM嵌入式学习问答
- 2013.10.6日在109机房维护电脑心得_红蜘蛛出现异常