写string类学C++ 构造函数 重载 友元
来源:互联网 发布:中国骨科手术量数据 编辑:程序博客网 时间:2024/06/13 03:43
一直没有系统学过c渣渣,现来写个string类学习下吧,不然找不的offer的
这个mystring类是作为学习写构造函数,析构函数,函数重载,友元函数等。并没有将很多问题比如效率
mystring.cpp
#ifndef _MYSTRING_H_#define _MYSTRING_H_#include<iostream>class Mystring{ private: char *str=NULL; public: Mystring(); ~Mystring(); Mystring(const char *s); Mystring(int n,char c); Mystring(const Mystring &val); int size()const; friend Mystring operator+(const Mystring &,const Mystring &); Mystring& operator=(const Mystring &); Mystring& operator=(const char *); Mystring& operator=(const char); friend std::ostream& operator<<(std::ostream&,const Mystring &); char operator[](int n); void show();};#endif
mystring.cpp
/************************************************************************* > File Name: mystring.cpp > Author: chunquanL > Created Time: 2017-04-16 ************************************************************************/#include"mystring.hpp"Mystring::Mystring(){ str=new char[1]; str[0] = '\0';}Mystring::~Mystring(){ delete []str;}static unsigned int mystrlen(const char *s){ if(!s) return 0; int res=0; while(*s++) res++; return res;}static char* mystrcpy(char *dst,const char *src){ if(!dst || !src) return (char *)0; while((*dst++=*src++)!='\0') ; return dst;}Mystring::Mystring(const char *s):str(NULL){ str=new char[mystrlen(s)]; mystrcpy(str,s);}Mystring::Mystring(const Mystring &val){ str=new char[val.size()]; mystrcpy(str,val.str);}Mystring::Mystring(int n,char c):str(NULL){ str = new char[n+1]; for(int i=0;i<n;i++) str[i]=c; str[n]='\0';}inline int Mystring::size(void) const{ return mystrlen(str)+1;}Mystring operator+(const Mystring &l_val,const Mystring &r_val){ Mystring res; res.str = new char[l_val.size()+r_val.size()-1]; mystrcpy(res.str,l_val.str); mystrcpy(res.str+mystrlen(l_val.str),r_val.str); return res;}Mystring& Mystring::operator=(const Mystring &val){ if(str == val.str) return *this; delete[] str; str = new char[val.size()]; mystrcpy(str,val.str); return *this;}Mystring& Mystring::operator=(const char *s){ delete[] str; str = new char[mystrlen(s)+1]; mystrcpy(str,s); return *this;}Mystring& Mystring::operator=(const char c){ delete[] str; str = new char[2]; str[0] = c; str[1] = '\0'; return *this;}char Mystring::operator[](int n){ return str[n];}void Mystring::show(void){ std::cout<<str;}std::ostream& operator<<(std::ostream &os,const Mystring &val){ os<<val.str; return os;}
测试代码
/************************************************************************* > File Name: teststr.cpp > Author: chunquanL > Created Time: 2017-04-16 ************************************************************************/#include<iostream>#include"mystring.hpp"using namespace std;int main(void){ cout<<"test:\n"; Mystring a; cout<<"a: "<<a<<endl; Mystring b("this is b"); cout<<"b: "<<b<<endl; cout<<"c(b)"; Mystring c(b); cout<<"c(b): "<<c<<endl; Mystring d; d=c; cout<<"d=c: "<<d<<endl; Mystring e; e = "abc"; cout<<"e=abc: "<<e<<endl; cout<<"e[2]"<<e[2]<<endl; Mystring f(4,'f'); cout<<"e=ffff: "<<f<<endl; a="aaa"; b="bbb"; c="ccc"; cout<<"a+b: "<<a+b<<endl; cout<<"a+123: "<<a+"123"<<endl; cout<<"123+a: "<<"123"+a<<endl; cout<<"a+b+c: "<<a+b+c<<endl; return 0;}
0 0
- 写string类学C++ 构造函数 重载 友元
- String类的简易实现,用到了构造函数、析构函数、重载运算符、拷贝构造函数、友元函数等知识
- 【c++】关于类继承运算符重载友元函数
- 友元函数重载
- C++一元运算符的构造函数重载和友元函数重载
- 日期类的实现(其中包括构造函数,拷贝构造,赋值运算符重载,输出运算符重载,友元函数等等)
- C++String构造函数
- C++:构造函数,析构函数及友元函数
- 拷贝构造函数,赋值运算符重载,友元输出重载
- 从零开始学C++之运算符重载(一):以成员函数方式重载、以友元函数方式重载
- 从零开始学C++之运算符重载(一):以成员函数方式重载、以友元函数方式重载
- 从零开始学C++之运算符重载(一):以成员函数方式重载、以友元函数方式重载
- 从零开始学C++之运算符重载(一):以成员函数方式重载、以友元函数方式重载
- 重载为类的友元函数
- String类的构造函数、析构函数、拷贝构造函数、赋值运算符重载
- C#:方法重载、构造函数、重载构造函数小结
- C++ Special: 复制构造函数、虚析构函数、运算符重载(友元)
- 写String类的普通构造函数,析构函数,拷贝构造函数和赋值函数
- 【神经网络与深度学习】【计算机视觉】YOLO2
- Codeforces 467B Fedor and New Game
- VS2012创建和使用DLL
- 文章标题
- CSU1100
- 写string类学C++ 构造函数 重载 友元
- 2017-4-16
- effective javascript(三)——原始类型优于封装对象
- JavaScript的计时器
- k-均值算法及其实现
- 基于Java+OpnenCV的图像读取与显示
- libevent理解
- SMOJ 1767 子串个数 (AC自动机+状压DP)
- python学习笔记(二)数据结构与算法