string类的几个功能简单实现

1.构造函数:

#include<stdio.h>
#include<string.h>
class String{//创建一个String类 
    public:
        String(char*str=" ")
        {
                int length =strlen(str);
                _str = new char[length+1];
                strcpy(_str,str);//拷贝字符串 
        }
    void prit();//声明一个类成员函数打印字符串打印字符串 
    private:
        char*_str;
};
void String::prit()//没有返回值,添加void(注意)
{
    printf("%s",_str);
}
int main()
{
    String s1="String";
    s1.prit();//打印String 
    return 0;
}

2.对"="进行操作符重载:

#include<string.h>
#include<stdio.h>
using namespace std;
class String{
    public:
    String(){};//构造函数(我觉得写不写好像都一样) 
    String(char*str){
        int len=strlen(str);
        _str=new char[len+1];
        strcpy(_str,str);
    }
    String operator=(String str)//对"="进行操作符重载 
    {
        int len=strlen(str._str);//获取字符串长度 
        _str=new char[len+1];//申请空间 
        char* s=_str;
        for(;*str._str;++*str._str,++s)//可以直接用strcpy函数 
        {
            *s=*str._str;
        }
        *s='\0';
    }
    void prit();
    ~String(){};//析构函数(同上写不写都一样...) 
    private:
        char*_str;
};
void String::prit()
{
    printf("%s\n",_str);
}
int main()
{
    String s1="hello";
    s1.prit();
    String s2=s1;
    s2.prit();
    return 0;
}

3:浅拷贝:

#include<string.h>
#include<stdio.h>
class String{
    public:
        String(const String &s)//如果只是传递该类的类类型,没有加引用,会报错
        {
            _str=s._str;//传递字符串指针 
        }
        String(char*str=" ")
        {
                int length =strlen(str);
                _str = new char[length+1];
                strcpy(_str,str);
        }
    void prit();
    private:
        char*_str; 
        
}; 
void String::prit()
{
    printf("%s\n",_str);
}
int main()
{
    String s1="hello";
    String s2(s1);
    s2.prit();
    return 0;
}

4.对>>和<<进行重载:

#include<iostream>
#include<string.h>
using namespace std;
class String
{
    public:
    String(char*str="")
    {
        int len=strlen(str);
        s=new char[len+1];
        strcpy(s,str);
    }
    String operator=(String str)
    {
        s=str.s;
    }
    friend ostream &operator<<(ostream &output, const String &ss)
    {
        output<<ss.s;
        return output;
    }
    friend istream &operator >> (istream &input, String &ss)
    {
        char temp[100];
         input>>temp;
         ss=temp;
          return input;
    }
    private:
        char*s;
};
int main()
{
    String s="hello";
    String s1;
    cout<<s<<endl;
    cin>>s1;
    cout<<s1;
    return 0;
}

学的不太扎实,就先写这么多了,等以后再回来修改,补齐

转载于:https://www.cnblogs.com/swustzww/p/8463502.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值