【C++】String类及其优化版的实现
2015-08-25 21:19
351 查看
#include<iostream> using namespace std; class String { public: String() { _ptr = new char[1]; _ptr[0] = 0; } String(const char* str) { _ptr = new char[strlen(str)+1]; strcpy(_ptr,str); } String(const String& str) { _ptr = new char[strlen(str._ptr)+1]; strcpy(_ptr,str._ptr); } String& operator =(const String& str ) { if(this != &str) { delete []_ptr; _ptr = new char[strlen(str._ptr)+1]; strcpy(_ptr,str._ptr ); } return *this; } ~String() { delete []_ptr; } char* GetStr() { return _ptr; } private: char* _ptr; }; int main() { String s1; cout<<"s1:"<<s1.GetStr()<<endl; String s2("abcd"); cout<<"s2:"<<s2.GetStr()<<endl; String s3("1234"); cout<<"s3:"<<s3.GetStr()<<endl; String s4(s2); cout<<"s4:"<<s4.GetStr()<<endl; s2 = s3; cout<<"s2:"<<s2.GetStr()<<endl; getchar(); return 0; }
String的优化版
#include <iostream> using namespace std; class String { public: String(char* str) :_ptr(new char[strlen(str) + 1]) { strcpy(_ptr, str); } void Swap(String& s) { char* tmp = s._ptr; s._ptr = _ptr; _ptr = tmp; } String(const String& s) :_ptr(NULL) { String tmp(s._ptr); Swap(tmp); } //String& operator=(const String& s) //{ // if (this != &s) // { // String tmp(s._ptr); // this->Swap(tmp); // } // return *this; //} String& operator=(String s) { // Swap(s); return *this; } //String& operator=(const String& s) //{ // if (this != &s) // { // delete [] _ptr; // _ptr = new char[strlen(s._ptr) + 1]; // strcpy(_ptr, s._ptr); // } // return *this; //} ~String() { if (_ptr) { delete[] _ptr; } } // 四个默认成员函数 + operator[] char* GetStr() { return _ptr; } private: char* _ptr; }; int main() { String s1("abcd"); String s2(s1); String s3("efghs"); s3 = s2; s2 = s2; cout<<"s1:"<<s1.GetStr()<<endl; cout<<"s2:"<<s2.GetStr()<<endl; cout<<"s3:"<<s3.GetStr()<<endl; return 0; }
相关文章推荐
- PAT的C++编译器
- c++ string 路径处理
- C++ Primer : 第十二章 : 动态内存之动态内存管理(new和delete)
- 【C++】顺序表的实现
- 让自己习惯C++
- 汇编+C点亮led-以替代uboot的方式执行
- 【C++】万年历的实现
- 面试中的C++常见问题
- 排序算法之选择排序(C语言实现)
- 字符函数库
- 关于C++的面试题
- 纯汇编点亮led-以替代uboot的方式执行
- c与c++ static函数的区别
- 【C++】单链表的实现
- 【转】使用 C++ 处理 JSON 数据交换格式
- singleton的实现与销毁(1) --modern c++读书笔记
- c++加密解密
- C++ 关键字 explicit, export, mutable
- C/C++常用库及工具
- c/c++内存对齐