String类的编写

原创 2015年07月10日 16:33:30
#include<iostream>
#include<stdlib.h>
using namespace std;

class String
{

public:

    //当不传值构造时,默认为一个‘\0’

    String() :ptr(new char('\0'))
    {}
    String(const char *x) :ptr(new char[strlen(x) + 1])
    {
        //将x中的字符串拷贝到ptr中
        strcpy(ptr,x);
    }
    String(const String &other)
    {
        //自己拷贝自己情况
        if (this != &other)
        {
            //拷贝构造不可能出现ptr原来就有指向的情况
            ptr = new char[strlen(other.ptr) + 1];
            strcpy(ptr, other.ptr);
        }
    }
    String& operator=(const String &other)
    {
        //自己拷贝自己情况
        if (this != &other)
        {
            //当ptr原来有指向空间时
            if (ptr != NULL)
                delete []ptr;
            ptr = new char[strlen(other.ptr) + 1];
            strcpy(ptr, other.ptr);
        }
        return *this;
    }
    char* GetString()
    {
        return ptr;
    }

    ~String()
    {
        if (ptr != NULL)
            delete[]ptr;
    }
private:
    char *ptr;
};

int main()
{
    char *a = "nihao";
    char *x;
    char *y;
    //构造函数测试
    String test1;
    String test2(a);

    x = test1.GetString();
    y = test2.GetString();

    while (*x != '\0')
        cout << *x++;
    cout << endl;
    while (*y != '\0')
        cout << *y++;
    cout << endl;

    //拷贝构造函数测试
    String test3(test2);
    char *z = test3.GetString();
    while (*z != '\0')
        cout << *z++;
    cout << endl;

    //赋值重载测试
    test1 = test2;
    x = test1.GetString();
    while (*x != '\0')
        cout << *x++;
    cout << endl;

    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

编写类String的构造函数、析构函数和赋值函数

已知类String的原型为:class String { public: String(const char *str = NULL); // 普通构造函数 String(const St...

编写类String的构造函数、析构函数和赋值函数

编写类String的构造函数、析构函数和赋值函数,已知类String的原型为: class String {       public:       ...

编写类String的构造函数、析构函数和赋值函数

今天把String的构造函数、析构函数和赋值函数编写复习了一下,先把代码保存一下,以备以后需要复习的时候。 #include #include class String { public: ...

C++基础之编写String类(拷贝构造函数)

拷贝构造函数的本质:一种函数,特殊的构造函数 拷贝构造函数的写法:和

编写 类string的构造函数、析构函数、赋值函数

编写 类string的构造函数、析构函数、赋值函数 #include //#include // iostream 包含了strlen、strcpy? using name...

编写类String的构造函数、析构函数和赋值函数(2)

编写类String的构造函数、析构函数和赋值函数。重载输出运算符。class String { public: String(const char *str = NULL); // 普...

编写类String 的构造函数、析构函数和赋值函数

编写类String 的构造函数、析构函数和赋值函数,已知类String 的原型为: class String { public: String(const char *str = NULL);...

C/C++面试题:编写类String的构造函数、析构函数和赋值函数。

考点:构造函数、析构函数和赋值函数的编写方法 出现频率:☆☆☆☆☆ 已知类String的原型为:         class String         {  ...

编写String类

class String { public: String(const char *src = NULL);//构造函数 String(const Strin...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)