写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
原创粉丝点击