回 帖 发 新 帖 刷新版面

主题:[讨论]string类

先上代码:
#include<iostream.h>
#include<string.h>
class String
{
public:
    String();
    String(char *s);
    String(String& t);
    ~String();
    String& operator = (String &a);
    String operator + (String &b);
    
    friend ostream& operator<<(ostream& out,String& s);
    

protected:
    char *p;
};

String::String()
{
   
}

String::String(char *s)
{
    p=new char[strlen(s)+1];
    if(p!=NULL)
        strcpy(p,s);
    
}

String::~String()
{   if(p!=NULL)
        delete p;
}

String::String(String& t)
{
    p=new char[strlen(t.p)+1];
    if(p!=NULL)    
        strcpy(p,t.p);
}

String String::operator +(String &b)
{   String s;
    s.p=new char[strlen(p)+strlen(b.p)+1];
    s.p=strcat(p,b.p);
    return s;
}

String& String::operator =(String &a)
{
    strcpy(p,a.p);
    return *this;
}



void main()
{
    String s1("abcdef"),s2("ghijkl"),s3,s4(s1);
    s3=s1+s2;
    
}
我学的教材是<<c++程序设计教程>>清华大学出版
这是我想要写的String类,不是可运行的,输出流重载不懂哈...555555.大神能够给小弟讲解一下感激不尽拉,最好附例子哈。
还有无参构造函数也不知道怎么写...
总之,帮我补充一下剩下的代码哈...
有什么意见和建议多多提出来,我想我应该有很多毛病在里面的,我接受哈.
万分感激!

回复列表 (共2个回复)

沙发


我不知道你看的什么书,用的什么编译器,我也不去评论
我随手帮你改了一下,没检查,你自己检查一下

[code=c]
#include <iostream>
#include <cstring>

#define nullptr 0

class String
{
public:
    String( const char* s=nullptr );
    String( const String& s);
    ~String();
    String& operator=( const String& s );
    String operator+( const String& s );

    friend std::ostream& operator<<( std::ostream& out, const String& s );

protected:
    char* p_;
};

String::String( const char* s ) : p_(nullptr)
{
    if( s )
    {
        try {
            p_ = new char[strlen(s)+1];
            strcpy( p_, s );
        } catch( std::bad_alloc& ) {
            throw;
        }
    }
}

String::String( const String& s) : p_(nullptr)
{
    if( s.p_ )
    {
        try {
            p_ = new char[strlen(s.p_)+1];
            strcpy( p_, s.p_ );
        } catch( std::bad_alloc& ) {
            throw;
        }
    }
}

String::~String()
{
    delete[] p_;
}

String& String::operator=( const String& s )
{
    if( this != &s )
    {
        delete[] p_;
        p_ = nullptr;

        if( s.p_ )
        {

            try {
                p_ = new char[strlen(s.p_)+1];
                strcpy( p_, s.p_ );
            } catch( std::bad_alloc& ) {
                throw;
            }
        }
    }

    return *this;
}

String String::operator+( const String& s )
{
    if( !p_ )
        return s;
    if( !s.p_ )
        return *this;

    size_t len = strlen(p_);
    String t;
    t.p_ = new char[len+strlen(s.p_)+1];
    strcpy( t.p_, p_ );
    strcpy( t.p_+len, s.p_ );
    return t;
}

int main()
{
    String s1("abcdef"), s2("ghijkl"), s3, s4(s1);
    s3 = s1+s2;

    return 0;
}
[/code]

板凳


谢谢,很有帮助!!!    
下次我会注意的,尽量说清楚一些,注释一下。
还是谢谢了!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册