类中构造函数、析构函数与赋值函数的重写

类中构造函数、析构函数与赋值函数的重写

class String

{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~String(void); // 析构函数
String & operate=(const String &other); // 赋值函数


private:
    char *m_data; // 用于保存字符串
};


// String 的析构函数
String::~String(void)
{
if (m_data)
{
   delete[] m_data; //由于m_data是内部数据类型,可以写成 delete m_data;
   m_data = NULL;
}
}


//String的普通构造函数
String::String(const char *str)
{
if (NULL == str)// 若能加 NULL 判断则更好
{
   m_data = new char[1]; 
   m_data[0] = '\0';
}
else
{
   int length = strlen(str);


   m_data = new char[length+1]; //+1是为'\0'分配一个字符
            if (NULL != m_data)
            {
                strcpy(m_data, str);
            }
   else {
                //异常处理
            }
}
}


// 拷贝构造函数
String::String(const String &other)
{
int length = strlen(other.m_data);//由于other是condt类型,因此不用判断是否为NULL


m_data = new char[length+1];  //+1是为'\0'分配一个字符
        if (NULL != m_data)
        {
            strcpy(m_data, other.m_data);
        }
else {
            //异常处理
        }
}




// 赋值函数
String & String::operate=(const String &other)
{
if (this == &other) //(1)检查自赋值
{
   return *this;
}


delete []m_data;//(2)释放原有的内存资源
        m_data = NULL;

//(3)分配新的内存资源,并复制内容
int length = strlen(other.m_data);
m_data = new char[length+1]; //+1是为'\0'分配一个字符
        if (NULL == m_data)
        {
            ...//异常处理
            return *this;
        }
        else
        {
            strcpy(m_data, other.m_data);
        }


//(4)返回本对象的引用
return *this;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sublime Text3(mac)一些插件和快捷键

Sublime Text3(mac)一些插件和快捷键 楚简约 关注 2017.02.24 17:02* 字数 1216 阅读 412评论 0喜欢 2下载地址http://www.sublimetext.com/3一、安装Package Control按Ctrl 调出console,粘贴下列安装代码到底部命令行并回车: 重…

linux+内核+环形缓冲,环形缓冲区-模仿linux kfifo【转】

struct kfifo{uint8_t *buffer;uint32_t in; // 输入指针uint32_t out; // 输出指针uint32_t size; // 缓冲区大小,必须为2的次幂}/*判断n是否为2的幂*/static bool is_power_of_2(unsigned int n){return (n ! && ((n & (n - )) ));}/*将数字a向上取整…

【Project3】技术总结

1.quartz 百分百自己会用 2.转载于:https://www.cnblogs.com/mount/archive/2011/11/09/2243265.html

4-7月份规划

1.准备管理系统中计算机应该实践2.学习高等数学二及英语二3.学习VB.Net(估计公司会用VB.Net),不过可以尽量争取C#4.和红哲讨论一下测试方法.5.对财务系统的测试,加强财务的能力6.购一本练习会计分录的习题集. 7.今后的发展方向,融投资管理 转载于:https:…

没去公司上班的这两天

这周得到通知是居家办公,但因为项目的事,前两天去了公司,今天情况特殊,我需要去合作的公司调试,就没去公司。早上还是9点起来,因为合作的公司离我家很近,可以多休息一会。但早早就睁开了眼&…

Activity的缓存方法

转载地址:http://blog.csdn.net/zhichu_2025/article/details/52047605 有a、b两个activity,当a进入b之后的一段时间,可能系统就把a回收了,这时候按back键,执行的不是a的onStart()方法,而是onCreate()方法&#xff0c…

c# datatable

DataTable dt new DataTable("cart"); //创建表dt.Columns.Add( new DataColumn("number", Type.GetType("System.String"))); //创建列 dt.Columns.Add( new DataColumn("qq", Type.GetType("System.String")));DataR…

linux pdm 查看工具,linux系统监控工具

通过系统监控可以了解系统的运行状态、及时发现异常、分析原因、提早解决,避免系统故障,确保用户对系统的感知度和满意度。IPTV系统一般是通过告警管理、日志管理、信令跟踪、探针、诊断测试来实现对系统的监控。小编为大家分享了linux系统监控工具&…

windows服务器下com6僵尸***删除

服务器被挂马,有一些可以被清除,有一个***被命名为com6.asp,无法被简单删除,网上baidu了一下,只能通过命令行的方式才能删掉,试了半天还是不可以,最后发现***文件还被设置成为了 RSH 属性&#…

USB抓包

安装的时候需要选上安装完之后,会提示让你重启电脑,如果不重启电脑的话也看不到USB的设备。之后可以通过usb.src来过滤自己想dump的设备信息当然,有一个技巧是,你可以先停止读写你的USB,然后再操作你的USB设备&#xf…

波波的个人简历

本人概况 姓名:bobo民族:汉 学历 (学位 ):大专 联系电话: 54103165联系地址:上海 云景路 185弄 10楼 101室 Email Address : caravarnhotmail.com QQ:179326710性别:男 手机: 139179…

Linux记起始和结束时间,Linux历史命令的记住执行时间

本文主要说明平台是Red Hat / CentOS系列系统。当安装完一台Linux后,我们可以把下列事情当作第一件要做的事:让history记录执行命令的时间:上代码export HISTTIMEFORMAT"[%Y-%m-%d %H:%M:%S] "export HISTFILESIEZE1000000export H…

Appium的环境搭建和配置

Appium的环境搭建和配置 一、安装Nodejs 下载nodejs安装包(https://nodejs.org/en/download/)安装 下载后,双击安装文件,按提示来安装。 测试安装是否成功:运行cmd,输入node –v 二、安装android的SDK 安装…

[转载]C#异步委托的用法 .

每个委托都有三个方法:Invoke、BeginInvoke、EndInvoke。第一个方法是委托指定函数的同步调用,另外两个是异步调用。BeginInvoke方法,调用后立即返回,不等待调用结果。EndInvoke方法,用于检索调用结果。调用BeginInvok…

sqlite3的基本操作

转自:http://blog.chinaunix.net/uid-26833883-id-3239313.html一、数据库基本概念 A.数据(Data)能够输入计算机并能被计算机程序识别和处理的信息集合。B.数据库(Database)数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合。注意&am…

收藏这些芯片原厂的代码仓库

本次给大家分享一些芯片原厂的代码仓库,这些资源已收录到咱们嵌入式大杂烩的资源仓库里了:https://gitee.com/zhengnianli/EmbedSummary我们用到一个新的芯片时,一般在它们的官网都可以找到一些入门、上手的资料。除此之外,有些原…

javascript计算小数保留两位小数,多位小数的方法

<SCRIPT LANGUAGE"JavaScript"><!--functionformatFloat(src, pos){ return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos);}alert(formatFloat("1212.2323", 2));//--></SCRIPT>转载于:https://www.cnblogs.com/catxp/archi…

Android dumpsys命令详细使用

Android dumpsys命令详细使用 一、dumpsys命令介绍 1.命令说明 Dumpsys用户系统诊断&#xff0c;它运行在设备上&#xff0c;并提供系统服务状态信息 命令格式&#xff1a; adb shell dumpsys [system serbices] 2.系统服务查询 如果直接运行adb shell dumpsys&#xff0c;将会…

qemu+linux+x86+64,qemu以64位跟32位的方式跑busybox

qemu以64位和32位的方式跑busybox两种方式x86_64 和32位的i386方式-----------x86_64-----------------------------------------参考http://mgalgs.github.io/2015/05/16/how-to-build-a-custom-linux-kernel-for-qemu-2015-edition.html下载busybox和linux内核TOP/var/www/my…

基于 esp32 + lvgl8.0 的小电视

一个有趣的作品&#xff0c;转给需要的小伙伴。详情可阅读&#xff1a;https://gitee.com/wangpeng25/the-little-bili-tv输入图片说明支持功能微信配网&#xff08;完成&#xff09;时间显示&#xff08;完成&#xff09;三日天气显示&#xff08;完成&#xff09;温湿度显示&…