String类

#include <iostream>
#include <string.h>
using namespace std;

class Count
{
	public:
	Count():number(1){}
	bool countsub()
	{
		number--;
	}
	bool countadd()
	{
		number++;
	}
	bool IsOne()
	{
		if(number==1)return true;
		else return false;
	}
	private:
	int number;
};
class String
{
	public:  
        String()
				{
					_initString("",1);
				}
        String(const String& s)
				{
					_initString(s.ptr,strlen(s.ptr));
					count.countadd();
				}
        String(const char *pc, size_t len)
				{
					_initString(pc,len);
				}
        String(const char *pc)
				{
					_initString(pc,strlen(pc));
				}
        ~String()
				{	
					if(count.IsOne())
					  {
						cout<<"~String()"<<endl;
						delete [] ptr;
						}
						count.countsub();
				}
        String& operator=(const String &s)
				{	
					if(this!=&s)
					{	
						if(ptr!=NULL)
								delete ptr;
						_initString(s.ptr,strlen(s.ptr));
					}
				}
        String& operator=(const char *s)
				{
					_initString(s,strlen(s));
				}
        String& operator+=(const String &rhs)
				{
					char *buf = new char[strlen(rhs.ptr)+strlen(ptr)+1];
					_initString(buf,strlen(buf));
				}  
        String& operator+=(const char *rhs)
				{
					if(!rhs)
					{	
						strcat(ptr,rhs);
					}
				}
				void printf()const
				{
					cout<<ptr<<endl;
				}  
        size_t getLength()const 
				{
				return strlen(ptr);
				}  
			char* operator[](size_t size)
				{
						return &ptr[size];
						//return (char *)((String *)this->ptr[size]);
				}
    private:
        void _initString(const char *cstr, size_t len)
				{
					ptr = new char[len+1];
					strncpy(ptr,cstr,len);
				}  
	private:
		Count count;
		char *ptr;
};


int main()
{
	String s("1234");
	*(s[2])='0';
	s.printf();
	//String b("1234567",2);
	//String c(b);
	//String d;
	//d = c;
	//b.printf();
	//s.printf();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值