自己动手实现一个简单的string类(一)

定义一个基本的String

class String

{

public:

    String():base(" "){}

private:

   char *base;

   long int length;

};

我们可以看到在这个类里面我们用一个char型指针来保存字符串值,long int 型值length来保存字符串的长度。

  由于我们知道string类支持这样的构造函数:

string str(hello”);

string str(5,’c’);

string str1(str,2);

string str2(str,0,2);

故我们给我们的String类添加相应的构造函数:

class String

{

public:

    String():base(""),length(0){}

    String(const char* p)

    {

       if (p == NULL)

       {

           base = new char[1];

           base = '/0';

       }

       else

       {

           base = new char[strlen(p)+1];

           strcpy(base,p);

       }

       length = strlen(p);

    }

    String(int count,char ch)

    {

       base = new char[count+1];

       for (int i=0; i<count; i++)

       {

           base[i] = ch;

       }

       base[++i] = '/0';

       length = count;

    }

    String(String& str,int count)

    {

       base = new char[count+1];

       strncpy(base,str.base,count);

       base[count] = '/0';

       length = count;

    }

    String(String& str,int index,int count)

    {

       base = new char[count+1];

       for (int i=index,j=0; i<count+index; i++)

       {

           base[j++] = str.base[i];

       }

       base[j] = '/0';

       length = count;

    }

private:

   char *base;

   long int length;

};

  为类添加拷贝构造函数和析构函数

拷贝构造函数:

String(const String &str)

    {

       base = new char[str.length+1];

       strcpy(base,str.base);

}

注意这里的拷贝构造函数的形参是定义为const,为什么要定义为const呢?是因为要既能接收const实参,又能接受非const实参。若是我们定义为非const,则无法接受const实参了。那为什么我们不定义函数重载呢。那是一个类只能有一个复制构造函数啦。

析构函数:

~String()

    {

       if (length != 0)//防止空串情况。

       delete base;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值