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

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;
}

类中构造函数、析构函数与赋值函数的重写相关推荐

  1. C++类的构造函数、析构函数与赋值函数

    C++类的构造函数.析构函数与赋值函数 构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险. 每个类只有一个析构函数和 ...

  2. String 的普通构造函数、拷贝构造函数、析构函数、赋值函数

    转自:http://blog.csdn.net/xiaoxiangzhu660810/article/details/8149398 题目:编写类String的构造函数.析构函数和赋值函数,已知类St ...

  3. 【C++】Big Five: 构造函数、拷贝构造函数、拷贝赋值函数、移动构造函数、析构函数

    前言 C++类的成员变量是否含有"指针类型"直接决定了"Big Five"函数(就是标题中的5个函数)的编写!有无指针类型"成员变量造成Big Fiv ...

  4. 派生类中构造函数与虚构函数的研究

    1.继承过程中的构造函数 A:继承与派生过程中,基类的构造函数不能被继承,派生类中需要声明自己的构造函数. B:声明构造函数时,只需要对本类中新增成员进行初始化.至于基类继承过来的成员,应该调用基类的 ...

  5. C++反汇编第一讲,认识构造函数,析构函数,以及成员函数

    C++反汇编第一讲,认识构造函数,析构函数,以及成员函数 以前说过在C系列下的汇编,怎么认识函数.那么现在是C++了,隐含有构造和析构函数 一丶认识构造函数 高级代码: class MyTest { ...

  6. PHP类中的__get()和__set函数到底有什么用

    PHP类中的__get()和__set函数到底有什么用 一.总结 一句话总结:当试图获取一个不可达变量时,类会自动调用__get.同样的,当试图设置一个不可达变量时,类会自动调用__set.在网站中, ...

  7. C++ 深拷贝和浅拷贝std::move移动构造函数,移动赋值函数

    一个class如果包含了普通指针成员的话那就必须实现(如果是智能指针则则没有必要)特别是复制构造函数和移动构造函数不要忘记 构造函数, 析构函数, 拷贝构造函数, 移动构造函数, 移动赋值函数 拷贝复 ...

  8. C++多继承中重写不同基类中相同原型的虚函数

    在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA  {  public:  virtual void TestA();  };  class ...

  9. C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? https://www.zhihu.com/question/30838092/answer/49623765

    https://www.zhihu.com/question/30838092/answer/49623765 C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? 代码如下 ...

最新文章

  1. 【Web安全】利用burp抓包和CSRF伪造进入admin真实后台
  2. python装饰器作用-Python装饰器用法实例总结
  3. BeyondCompare
  4. 【学习笔记】SAP CO成本估算相关
  5. Django(part45)--forms模块
  6. matlab mandrill,MATLAB】MATLAB的自带数据及可生成数据的函数
  7. 红头文件rgb红色值_拿下抖音小姐姐,我写了个口红色号识别器
  8. 大连印象_2010暑期实训有感【一】
  9. flask v0.1 内部运行程序
  10. Mac Python IDLE中如何更改字体
  11. N皇后问题(回溯算法解法)
  12. Spring源码分析-从@ComponentScan注解配置包扫描路径到IoC容器中的BeanDefinition,经历了什么(一)?
  13. 离散时间信号处理第三版英文版课后习题答案
  14. 函数数列极限求法总结
  15. myelicpes2019初次使用设置_实况足球2019球员数据编辑器怎么使用
  16. PHP从入门到精通pdf
  17. 在上海乐字节学习CRM项目管理
  18. php美颜相机,手机照片美化软件哪个好|美颜相机官方版-官方版
  19. iOS上装kali Linux的方法
  20. This application failed to start because it could not find or load the Qt platform plugin “xcb“.

热门文章

  1. CentOS7安装OpenFire
  2. 不再单打独斗?中国移动联合多企业组建医疗数据公司
  3. 判断该网页是在什么设备打开。
  4. 在树莓派2上折腾kali2.0小记(1)
  5. SQL Cookbook—数字、日期
  6. 通用唯一识别码UUID
  7. 如何使用git命令行上传项目到github
  8. 机器学习算法之线性回归
  9. ubuntu之ufw防火墙
  10. yarn 怎么查看有多个job在跑_flink on yarn 模式下提示yarn资源不足问题分析