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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)