类String的构造函数、析构函数和赋值函数
2016-03-13 15:06
323 查看
海康威视16年春季校招编程题目
题目:编写类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; // 用于保存字符串 };
解答:
(1)//普通构造函数
构造函数:构造函数是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中,特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。
String::String(const char *str) { if(str == NULL) { m_data = newchar[1]; *m_data ='\0'; } else { int length = strlen(str); m_data = newchar[length+1]; strcpy(m_data,str); } }
(2)//拷贝构造函数
拷贝构造函数:拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。
String::String(const String &other) { int length = strlen(other.m_data); m_data = newchar[length+1]; strcpy(m_data,other.m_data); }
(3)// String的析构函数
析构函数:析构函数(destructor) 与构造函数相反,当对象脱离其作用于时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
String::~String(void) { delete []m_data; // 或deletem_data; }
(4)//赋值函数
String & String::operate =(const String&other) // 输入参数为const型 { if(this == &other) //检查自赋值 return *this; delete []m_data; //释放原有的内存资源 int length = strlen( other.m_data ); m_data = newchar[length+1]; //对m_data加NULL 判断 strcpy(m_data, other.m_data ); return *this; //返回本对象的引用 }
相关文章推荐
- 单例分享(循环引用及内存占用解决)
- C++标准程序库笔记(1)
- C++的构造函数浅析
- C语言宏定义##连接符和#符的使用
- 我们学不会的C语言的最大敌人是谁?
- C++ Primer引子
- 多种方法解决同一个问题(一)-----乘法口诀表
- c++的基本语言知识(三)
- c++的基本语言知识(四 )
- 用C/C++解决一些数学问题(一)
- C/C++的基本语言知识(五)
- 用C/C++解决一些数学问题(二)
- 用C/C++解决一些数学问题(三)
- 函数重载的意义详细说明
- 总结:用一个例子包含c++的所有的基本知识点(一)
- 日历查询
- 一些程序函数 C++语言,找数组中弟第K大的数和自己写的子符串截取函数
- 狐狸抓兔子的问题
- 尾单词长度、1 3 9 27 81 实现1-121任意算法、去除重复字符并排序、拼音转数字、按要求分解字符串
- 约瑟夫环 数组与链表实现