无敌与我 发表于 2019-4-19 15:01:31

问下这个代码为什么报错了

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

class MyString
{
private:
    char *str;//保存字符串的堆空间地址的指针

public:
    MyString()//无参构造函数
    {
      this->str = new char;
    }
    MyString(char *str)//有参普通构造函数
    {
      this->str = str;
    }
    MyString(MyString &S1)//深层拷贝构造函数
    {
      this->str = S1.str;
    }
    ~MyString()//析构函数
    {
      if (this->str != NULL)
            delete[](this->str);
      this->str = NULL;
    }
    char getCharAt(int index)//得到字符串中第index个字符
    {
      return str;
    }
    int getLen()//得到字符串的长度
    {
      return (sizeof(str) - 1);
    }
    void display()//显示字符串内容
    {
      cout << this->str;
    }

    void putChar(char *str)//保存字符串的堆空间地址的指针
    {
      this->str = str;
    }

    MyString operator+(MyString &S1)//实现2个字符串连接
    {
      MyString aux;
      aux = strcat(this->str, S1.str);
      return aux;
    }

    bool operator<(MyString &S1)//比较2个字符串
    {
      //如果返回值 < 0,则表示 str1 小于 str2。
      // 如果返回值 > 0,则表示 str2 小于 str1。
      // 如果返回值 = 0,则表示 str1 等于 str2。
      int aux = strcmp(this->str, S1.str); // a < b ?
      if (aux < 0)
      {
            return true;
      }
      return false;
    }

    ostream operator<<(MyString &S1)//析取运算符重载;用于输出字符串内容
    {
      S1.display();
    }
};

int main()
{
    char * str;
char * aux = "12345";
    MyString S1(str); //有参构造
    S1.putChar(aux);
    S1.display();
    cout << " true : " << S1.getCharAt(2) << endl;
    MyString S2(S1); ////深度拷贝
    S2.display();
    cout << " false:" << S2.getLen() << endl;
    MyString S3; ////无参构造
    S3.putChar(aux);
    S3.display();
    cout << S3.getLen() << endl;
    bool result;
    result = S1 < S3;
    system("pause");
    return 0;
}

无敌与我 发表于 2019-4-19 15:03:49

c++大佬们

无敌与我 发表于 2019-4-19 15:04:29

在线等急

Croper 发表于 2019-4-20 14:38:23

本帖最后由 Croper 于 2019-4-20 14:40 编辑

我可以帮你,而且代码都写好了,但是我觉得贴出来肯定就被你复制粘贴拿去应付作业了,
我觉得你应该去了一下什么叫深层拷贝,什么叫重载<<运算符
页: [1]
查看完整版本: 问下这个代码为什么报错了