ListerCi 2017-10-15 04:20 采纳率: 60%
浏览 993
已采纳

C++实现String类遇到的问题

环境是VS2015,想自己动手实现String类,主要代码如下:
Str.h :

 #ifndef STR_H
#define STR_H

#include <iostream>
using namespace std;

class Str {

private:
    char* m_data;

public:

    friend ostream& operator << (ostream& os, const Str& str);

    char* get_pointer() const {
        return m_data;
    }

    // 构造函数
    Str(const char* cstr = 0);

    // 拷贝构造
    Str(const Str& str);

    // 拷贝赋值
    Str& operator = (const Str& str);

    // 析构函数
    ~Str();
};

#endif // !STR_H

Str.cpp :

 #include "Str.h"
#include <cstring>

Str::Str(const char* cstr) {
    if (cstr) {
        m_data = new char[strlen(cstr) + 1];
        strcpy_s(m_data, 40, cstr);
    }
    else {
        m_data = new char[1];
        *m_data = '\0';
    }
}

Str::Str(const Str& str) {
    m_data = new char[strlen(str.m_data) + 1];
    strcpy_s(m_data, 40, str.m_data);
}

Str::~Str() {
    delete[] m_data;
}

// 拷贝赋值
Str& Str::operator = (const Str& str) {
    if (this == &str) {
        return *this;
    }
    delete[] m_data;
    m_data = new char[strlen(str.m_data) + 1];
    strcpy_s(m_data, 40, str.m_data);
    return *this;
}

ostream& operator << (ostream& os, const Str& str) {
    os << str.m_data;
    return os;
}

没加入 << 重载时,main函数中新建对象没有错误。加入 << 重载后,新建Str对象程序就会崩溃。求各路大神给个解答

  • 写回答

5条回答

  • 肥宅_Sean 2017-10-22 09:36
    关注

    运行了下,没毛病哇???

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器