自己实现String类
2016-04-19 17:10
274 查看
#include <iostream> #include<string.h> using namespace std; class String { public: String(const char *str = NULL);// 普通构造函数 String(const String &other); // 拷贝构造函数 ~String(); // 析构函数 String& operator=(const String &other);//赋值函数 bool operator==(const String &str); friend ostream & operator<<(ostream& o,const String &str); private: char *m_data;// 用于保存字符串 }; //普通构造函数 String::String(const char *str) { if(str==NULL) { m_data = new char[1];//得分点:对空字符串自动申请存放结束标志'\0' *m_data = '\0'; } else { int length = strlen(str); m_data = new char[length+1];//若能加 NULL 判断则更好 strcpy(m_data, str); } } // String的析构函数 String::~String(void) { delete [] m_data; // 或delete m_data; } //拷贝构造函数 String::String(const String &other)//得分点:输入参数为const型 { int length=strlen(other.m_data); m_data=new char[length+1];//加分点:对m_data加NULL 判断 strcpy(m_data, other.m_data); } //赋值函数 重载=运算符 String & String::operator=(const String &other)//得分点:输入参数为const { if(this == &other)//得分点:检查自赋值 return *this; delete [] m_data;//得分点:释放原有的内存资源 int length = strlen(other.m_data); m_data = new char[length+1];//加分点:对m_data加NULL 判断 strcpy(m_data, other.m_data); return *this;//得分点:返回本对象的引用 } //重载==运算符 bool String::operator==(const String &str) { return strcmp(m_data, str.m_data)==0; } //重载<<运算符,使其可对传入的string对象进行输出 ostream & operator<<(ostream &o,const String &str) { o<<str.m_data; return o; } int main() { String s = "hello"; String s2 = s; String ss = "hello"; cout<<"s = "<<s<<endl; cout<<"s2 = "<<s2<<endl; bool flag=(ss==s2); //boolalpha的作用是使bool型变量按照false、true的格式输出 cout<<boolalpha<<flag<<endl; return 0; }
结果:
s = hello s2 = hello true Process returned 0 (0x0) execution time : 1.109 s Press any key to continue.
转自:http://rsljdkt.iteye.com/blog/770072
相关文章推荐
- Redis-3.0.7主从简单复制的配置
- bootstrap得动态进度条
- Go 数据库连接方法,配置独立
- 《C++primer》读书笔记三
- spring 不同注解的使用场景
- MediaPlayer
- 内部类的使用以及抽象类的实现
- 更新到android studio2.0后,运行时出现一个问题:Error running app: Instant Run requires 'Tools | Android | Enable AD
- JAVA虚拟机之六:虚拟机性能监控和故障处理工具
- NYOJ 30 Gone Fishing(贪心)(个人理解笔记)
- opencv里的norm范数和图像里的深度和通道数的理解和意义和相机标定后对内外参数的质量评估
- 【BZOJ3036】绿豆蛙的归宿 概率DP
- 第八周:战斗模块
- request对象和response对象的作用和相关方法
- R语言︱函数使用技巧(循环、if族/for、switch、repeat、ifelse、stopifnot)
- ubuntu下安装mysql及卸载mysql方法
- JAVA虚拟机之五:常见配置与范例
- 冲刺一
- 莫比乌斯反演
- 为什么要乘以2?