C++ Primer Plus的string类的简单实现
来源:互联网 发布:淘宝钻展设计 编辑:程序博客网 时间:2024/06/14 19:19
重载构造函数,特别是重载复制构造函数。
为什么要重载复制构造函数? 在给string变量声明的时候,如 string str = str2; 编译器会自动生成复制构造函数,从而不会调用其他的构造函数,导致调用析构函数的次数增多。
重载运算符 =
友元重载运算符 > < = >> <<
//// stringBad.h// Class_String//// Created by Ben_22 on 14-5-14.// Copyright (c) 2014年 Ben_22. All rights reserved.//#ifndef __Class_String__stringBad__#define __Class_String__stringBad__#include <iostream>using std::ostream;using std::istream;#endif /* defined(__Class_String__stringBad__) */class String{private: char *str; size_t len; static int num_strings;public: static const int CINLIM = 80; String(const char *s); String(); String(const String &); ~String(); size_t length()const {return len;} String & operator=(const String &); String & operator=(const char *); char & operator[](int i); const char & operator[](int i )const; friend bool operator<(const String &st, const String &st2); friend bool operator>(const String &st, const String &st2); friend bool operator==(const String &st, const String &st2); friend ostream &operator<<(ostream &os, const String &st); friend istream &operator>>(istream &is, const String &st); static int HowMany();};
//// stringBad.cpp// Class_String//// Created by Ben_22 on 14-5-14.// Copyright (c) 2014年 Ben_22. All rights reserved.//#include <cstring>#include "stringBad.h"using std::cout;using std::cin;int String::num_strings = 0;int String::HowMany(){ return num_strings;}String::String(const char*s){ len = std::strlen(s); str = new char[len+1]; std::strcpy(str, s); num_strings++;}String::String(){ len = 0; str = new char[1]; str[0] = '\0'; num_strings++;}String::String(const String &st){ num_strings ++; len = st.len; str = new char [len+1]; std::strcpy(str, st.str);}String::~String(){ --num_strings; delete []str;}String &String::operator=(const String &st){ if (this == &st) { return *this; } delete []str; len = st.len; str = new char[len+1]; std::strcpy(str, st.str); return *this;}String &String::operator=(const char* s){ delete []str; len = std::strlen(s); str = new char[len+1]; std::strcpy(str, s); return *this;}char &String::operator[](int i){ return str[i];}const char & String::operator[](int i )const { return str[i];}bool operator<(const String &st1, const String &st2){ return (std::strcmp(st1.str, st2.str) < 0 );}bool operator>(const String &st1, const String &st2){ return (std::strcmp(st1.str, st2.str) > 0 );}bool operator==(const String &st1, const String &st2){ return (std::strcmp(st1.str, st2.str) == 0);}ostream &operator<<(ostream &os, const String &st){ os<< st.str; return os;}istream & operator>>(istream &is, String &st){ char temp[String::CINLIM]; is.get(temp, String::CINLIM); if (is){ st = temp; } while (is && is.get()!='\n') { continue; } return is;}
0 0
- C++ Primer Plus的string类的简单实现
- c plus plus的string函数实现
- c++primer plus第十六章-string类
- C++ Primer Plus(StringBad类的实现)
- 笔记(1)一些简单的输入输出--C Primer Plus
- c primer plus 14.13 奇特的声明
- C primer plus:指向函数的指针
- 来自<c primer plus >的随记
- C++string类的简单实现
- c++string类的简单实现
- [C++ Primer Plus]学习笔记--关于C++ string和c类型字符数组的对比
- MyString类的实现--C++ primer plus 读书笔记
- C++Primer Plus U4读书笔记 vector array string + primer
- C之行(2):C primer plus的第八题
- C++ Primer Plus(StringBad类的改进)
- c++ primer(第五版)笔记 第十三章(4) string 类和 vector<string> 容器的简单实现
- 《C Primer Plus》学习笔记之 C数据的属性(二)存储类
- C++ Primer Plus 练习String类
- 【Cocoa】cocoa UI 常用算法
- 微软谷歌面试100题之调整数组顺序使奇数位于偶数前面
- XMPP协议实现原理介绍
- loadrunner自带例子r打不开IE
- android ndk 生成so
- C++ Primer Plus的string类的简单实现
- c++获取程序路径
- Linux删除文件夹命令
- vim bundle configuration
- cocos2dx 常用函数和宏定义
- c# asp.net 修改webconfig文件 配置
- 创建二叉树 树的深度搜索 广度搜索
- JVM调优
- LeetCode 007 Reverse Integer