【C/C++】String类实现
2015-08-07 17:01
106 查看
今天去参加面试,有这么一道题
====================我是华丽丽的分割线=================
首先补充一些基础知识:
关于构造函数:
通俗的讲,在类中,函数名和类名相同的函数称为构造函数。它的作用是在建立一个对象时,作某些初始化的工作(例如对数据赋予初值)。C++允许同名函数,也就允许在一个类中有多个构造函数。如果一个都没有,编译器将为该类产生一个默认的构造函数。
构造函数上惟一的语法限制是它不能指定返回类型,甚至void 也不行。
关于析构函数:
当一个类的对象离开作用域时,析构函数将被调用(系统自动调用)。析构函数的名字和类名一样,不过要在前面加上 ~ 。对一个类来说,只能允许一个析构函数,析构函数不能有参数,并且也没有返回值。析构函数的作用是完成一个清理工作,如释放从堆中分配的内存。
一个类中可以有多个构造函数,但析构函数只能有一个。对象被析构的顺序,与其建立时的顺序相反,即后构造的对象先析构。
====================我是华丽丽的分割线=================
String 类的原型如下,实现下面的四个函数
构造函数如下:
析构函数如下:
拷贝构造函数:
赋值函数如下:
====================我是华丽丽的分割线=================
首先补充一些基础知识:
关于构造函数:
通俗的讲,在类中,函数名和类名相同的函数称为构造函数。它的作用是在建立一个对象时,作某些初始化的工作(例如对数据赋予初值)。C++允许同名函数,也就允许在一个类中有多个构造函数。如果一个都没有,编译器将为该类产生一个默认的构造函数。
构造函数上惟一的语法限制是它不能指定返回类型,甚至void 也不行。
关于析构函数:
当一个类的对象离开作用域时,析构函数将被调用(系统自动调用)。析构函数的名字和类名一样,不过要在前面加上 ~ 。对一个类来说,只能允许一个析构函数,析构函数不能有参数,并且也没有返回值。析构函数的作用是完成一个清理工作,如释放从堆中分配的内存。
一个类中可以有多个构造函数,但析构函数只能有一个。对象被析构的顺序,与其建立时的顺序相反,即后构造的对象先析构。
====================我是华丽丽的分割线=================
String 类的原型如下,实现下面的四个函数
class String { public: String(const char *str=NULL); //构造函数 String(const String &other); //拷贝构造函数 ~String(void); //析构函数 String& operator=(const String &other); //赋值函数 private: char *m_data; //指针 };
构造函数如下:
//构造函数 String::String(const char* str) { if (NULL == str) //当字符串不存在时,为m_data新申请一个存放空间用来存放 '\0' { m_data = new char[1]; *m_data = '0'; } else //当字符串存在时,为m_data申请一个存放空间,其大小等同于字符串的大小 { int length = strlen(str); m_data = new char[length + 1]; strcpy(m_data,str); } }
析构函数如下:
//析构函数 String::~String() { delete []m_data; // [] 在这里表示用来区别内部变量和外部变量 如果m_data是外部变量 就必须添加[] }
拷贝构造函数:
//拷贝构造函数 String::~String(const String &other) { int length = strlen(other.m_data); m_data = new [length + 1]; //m_data = new char[length + 1]; 这里切记不可以添加char 在这里只是对m_data分配空间 strcpy(m_data,other.m_data); }
赋值函数如下:
//赋值函数 String& String::operator = (const String &other) { if (this == &other) { return *this; } delete []m_data; int length = strlen(other.m_data); m_data = new [length + 1]; strcpy(m_data,other.m_data); return *this; }
相关文章推荐
- Google代码规范工具Cpplint的使用
- Google代码规范工具Cpplint的使用
- C++编程语言学习资料
- C++小结:多态(2) --类别与实现、动态多态
- C++实现List类
- 结构体赋值问题!
- C++快速排序
- 第六篇:C++语言源程序中每一行加一个反斜杠的意思
- c++ 内存池
- C语言之文件操作03——最长最短行查找和统计
- c++内存池
- 【C++】链表
- Word 中插入 C/C++ 代码(转)
- 虚表(C++)virtual table
- 字符串的组合算法问题的C语言实现攻略
- c语言参数传递方式
- 《深入理解C++对象模型》读书笔记(二)
- C语言编程优化运行速度
- 浅谈C++中指针和引用的区别
- C++小结-编译原理