字符串类的实现:构造函数、析构函数、复制构造函数和赋值操作符_构建字符串类,有构造函数,析构函数-程序员宅基地

技术标签: c++  字符串  赋值操作符  实现  构造函数  

强调一下几个重点:

(1)new 操作符申请内存失败,是抛出异常,并不是返回NULL,若想申请失败返回NULL,需要加 (std::nothrow);

(2)使用std::nothrow 需要加头文件 #include<new>

(3)使用assert

(4)构造函数有参数时最好加默认参数,这样就有默认构造函数了,且不要忘了定义为const

(5)赋值操作符函数体if语句中的条件必须是 this != &other,为什么if(*this != other)不行????

         刚想了下原因是:定义的类型没有!=操作符啊,怎么可以比较呢,只能比较指针了。。。

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

class String
{
    private:
        char *m_data;

    public:
        String(const char *str = NULL);
        ~String();
        char * get_m_data() {return m_data;}
        String(const String&);
        String& operator= (const String &);
};

String::String(const char *str)
{
    if(str == NULL)
    {
        m_data = new (std::nothrow) char[1];
        assert(m_data != NULL);
        *m_data = '\0';
    }else
    {
        m_data = new (std::nothrow) char[strlen(str) + 1];
        assert(m_data != NULL);
        strcpy(m_data, str);
    }
}

String::~String()
{
    if(m_data != NULL)
    {
        delete []m_data;
        m_data = NULL;
    }
}

String::String(const String &other)
{
    m_data = new (std::nothrow) char[strlen(other.m_data) + 1];
    assert(m_data != NULL);
    strcpy(m_data, other.m_data);
}

String& String::operator= (const String &other)
{
    if(this != &other)
    {
        String tmp(other);
        char *str = tmp.m_data;
        tmp.m_data = m_data;
        m_data = str;
    }

    return *this;
}

int main()
{
    String s1("a big brother is watching you!!!");
    String s2(s1);
    //printf("haha\n");
    String s3;
    s3 = s1;

    printf("%s\n", s1.get_m_data());
    printf("%s\n", s2.get_m_data());
    printf("%s\n", s3.get_m_data());

    return 0;
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/linuxcprimerapue/article/details/48023405

智能推荐

zzuli oj 1026: 字符类型判断(java)_由键盘输入一个字母,判断该字母是否为小写字母-程序员宅基地

文章浏览阅读1k次。题目描述从键盘输入一个字符,判断该字符是否大写字母、小写字母、数字字符或其他字符。分别输出对应的提示信息。输入输入一个字符。输出如果该字符是大写字母,则输出“upper”;若是小写字母,则输出“lower”;若是数字字符,则输出“digit”;若是其他字符,则输出“other”。(输出不含双引号)。样例输入E样例输出upper先调到java再提交import java.util.*;public class Main{ public static ._由键盘输入一个字母,判断该字母是否为小写字母

x32,x64下安装OleDB驱动_oledb驱动安装-程序员宅基地

文章浏览阅读4.4k次。Office 2007 x32,Win7 x64 安装OleDB驱动Office 2007、2010的Ace引擎都是Microsoft.ACE.OLEDB.12.0,这点从微软AccessDatabaseEngine包中可以得知。下面我们就来解决x32、x64下OLE驱动的安装。 Microsoft Access 2010 数据库引擎可再发行程序包Acces_oledb驱动安装

全新体验:借助海外云手机畅玩TikTok_可以用云手机玩tiktok吗-程序员宅基地

文章浏览阅读391次,点赞10次,收藏5次。对于众多跨境卖家而言,使用热门社交平台进行引流已成为常态,而TikTok作为全球短视频平台,吸引了来自全球的用户,成为众多商家争相开拓的新蓝海。要在中国运营TikTok账号,普通的手机不太方便,试试全新的海外云手机吧!_可以用云手机玩tiktok吗

BZOJ 1189 [HNOI2007]紧急疏散evacuate-程序员宅基地

文章浏览阅读339次。二分+最大流。首先可以发现如果t时间可以全部撤离,那么所有大于t的时间都可以撤离,于是考虑二分。又发现其实一个人往一个门走,走的肯定是最短路,于是可以计算出每个人到每个门的最短路。每一个人看作一个流量,由源点向每个人连容量为1的边。将每个门拆点表示每个时间出去的人(对于一个门C可以拆成编号为C+1,C+2,C+3,C+4……都向汇点连容量1的边),最多拆400个。每个人向每个门的【C+最短路距离】点

自动配置bond(0-6)脚本_网卡bond0脚本-程序员宅基地

文章浏览阅读149次。自动配置bond脚本(0-6)_网卡bond0脚本

H264编码流程_h.264编码流程-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏8次。H264编码流程手绘图:H264编码网上图:_h.264编码流程

随便推点

中国开源激荡 20 年:IT 江湖,谁主沉浮?-程序员宅基地

文章浏览阅读3k次。作者 |马超责编 | 伍杏玲出品 | CSDN(ID:CSDNnews)鹰击长空,鱼翔浅底,万类霜天竞自由。——《沁园春·长沙》去年底,一国外程序员写的《中国的开源项目正在破坏 Git..._中国 程序员 开源

http://blog.csdn.net/wem520/article/details/9233729_bolg.csdn.net/we-程序员宅基地

文章浏览阅读623次。在windows7上用IIS配置时出现这种错误,原因是在对应站点目录的IUSR的权限没设造成的...在属性——>安全——> 高级 中把IUSR用户找出来添加好_bolg.csdn.net/we

多输入多输出 | Matlab基于麻雀算法优化卷积神经网络(SSA-CNN)多输入多输出预测,麻雀算法优化卷积神经网络(SSA-CNN)的回归预测_卷积神经网络算法预测-程序员宅基地

文章浏览阅读90次。多输入多输出 | Matlab基于麻雀算法优化卷积神经网络(SSA-CNN)多输入多输出预测,麻雀算法优化卷积神经网络(SSA-CNN)的回归预测_卷积神经网络算法预测

FPGA用vhdl语言设计简单硬件电子琴设计_电子琴按键分频程序编写-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏28次。四音调 六音阶_电子琴按键分频程序编写

单片机学习心得(一)_arduino单片机学习心得-程序员宅基地

文章浏览阅读154次。单片机学习笔记,主要是以arduino开发板为主。_arduino单片机学习心得

年轻人为什么更喜欢真无线蓝牙耳机?2020五款高性价比蓝牙耳机推荐_jbl为什么只支持sbc-程序员宅基地

文章浏览阅读503次。自分离式腔体的耳机首次推出之后,真无线耳机的风潮席卷世界。很明显,真无线耳机让用户体验到了耳机与身体一体而行的自由体验,观感体验可谓是颠覆性的。蓝牙耳机的好处显而易见:首先,摆脱线材束缚,真正实现无拘无束这一点是显而易见的,纯粹的真无线蓝牙耳机再也没有线材的连接,真正的解放双手,并且轻盈、自在。在有些特定场合,比如运动、通勤等场合,一款真无线蓝牙耳机绝对是首选。其次,开启新的音频传输方式,真无线蓝牙耳机时代对比传统的入耳式“无线蓝牙耳机”,真无线蓝牙耳机的连接不仅是耳机和信号发射设备之间_jbl为什么只支持sbc