转自:http://blog.csdn.net/xiaoxiangzhu660810/article/details/8149398

题目:编写类String的构造函数、析构函数和赋值函数,已知类String的原型为: 

解答:
(1)//普通构造函数
构造函数:构造函数是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中,特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。

String::String(const char *str)
{if(str == NULL){m_data = newchar[1]; *m_data ='\0';}else{int length = strlen(str);m_data = newchar[length+1]; strcpy(m_data,str);}
}

(2)//拷贝构造函数
拷贝构造函数:拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。

String::String(const String &other)
{int length = strlen(other.m_data);m_data = newchar[length+1]; strcpy(m_data,other.m_data);
}

(3)// String的析构函数
析构函数:析构函数(destructor) 与构造函数相反,当对象脱离其作用于时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

String::~String(void)
{delete []m_data; // 或deletem_data;
}

(4)//赋值函数

String & String::operate =(const String&other) // 输入参数为const型
{if(this == &other)   //检查自赋值return *this;delete []m_data;     //释放原有的内存资源int length = strlen( other.m_data );m_data = newchar[length+1];  //对m_data加NULL 判断strcpy(m_data, other.m_data );return *this;        //返回本对象的引用
}

注意:在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数。

String 的普通构造函数、拷贝构造函数、析构函数、赋值函数相关推荐

  1. 什么是拷贝构造函数?拷贝构造函数何时被调用

    1.什么是拷贝构造函数: CA(const CA& C)就是我们自定义的拷贝构造函数.可见,拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变 ...

  2. 【C++】构造函数 无参构造函数 有参构造函数 拷贝构造函数内联函数

    文章目录 函数的定义 函数的的使用方法 函数的返回值 值传递 指针传递 引用传递 C++引用作为函数返回值 函数重载(Function Overloading) 运算符重载(Operator Over ...

  3. C++编程思想 第1卷 第11章 引用和拷贝构造函数 拷贝构造函数 拷贝构造函数

    编译器对如何从现有的对象产生新的对象进行了假定. 当通过按值传递的方式传递一个对象时,就创立了一个新对象,函数体内的 对象是由函数体外的原来存在的对象传递的 编译器假定我们想使用位拷贝来创建对象 每当 ...

  4. C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)

    1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...

  5. 构造函数,拷贝构造函数,赋值函数

        C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个 ...

  6. 基础备忘:拷贝构造函数和赋值函数

    3.1 拷贝构造函数概述 现在我们来学习一种特殊的构造函数--拷贝构造函数. 对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同 ...

  7. C++ 拷贝构造函数 赋值构造函数

    关键字:   C++      默认拷贝构造函数的行为如下:  默认的拷贝构造函数执行的顺序与其他用户定义的构造函数相同,执行先父类后子类的构造.  拷贝构造函数对类中每一个数据成员执行成员拷贝(me ...

  8. 拷贝构造函数和赋值函数(转)

    标签: 无标签 原帖地址:http://www.programfan.com/blog/article.asp?id=10944 现在我们来学习一种特殊的构造函数--拷贝构造函数. 对于普通类型的对象 ...

  9. 拷贝构造函数和赋值函数

    3.1 拷贝构造函数概述 现在我们来学习一种特殊的构造函数--拷贝构造函数. 对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同 ...

最新文章

  1. Python实现前端AES加密方式分析,***密码学必备!
  2. 使用canvas实现数据可视化
  3. python之禅怎么关闭_《Python之禅》中对于Python编程过程中的一些建议
  4. centos编译mysql5.6_centos7上编译安装mysql5.6
  5. 计算机boot进入u盘启动,暗影精灵5怎么设置u盘启动 暗影精灵5设置u盘启动方法...
  6. [Unity][NodeCanvas] 通过 .value 获取 BBParameter 黑板值
  7. php生成随机不重复的数字_PHP生成不重复随机数的几种方法
  8. 使用p4c将P4 14代码转换为16代码
  9. Shell脚本学习指南
  10. Innoreader + Rsshub
  11. android快速仿花椒,映客直播上下滑动切换直播间
  12. 微星超龙显卡的性能模式无法开机的原因与解决办法
  13. 安卓6.0权限处理在项目中的实践
  14. 微信小程序网易云音乐轮播图右侧留白
  15. 北大惠普金融指数-匹配企业绿色创新指数2011-2020年:企业名称、年份、行业分类等多指标数据
  16. oracle恢复误删的表
  17. Android Hawk数据库 github开源项目,字节跳动社招面试记录
  18. [Chrome] 超级好用的网页保存插件
  19. webpack源码解析
  20. JPEG原理分析 及 JPEG解码器的调试

热门文章

  1. 行为模式之Observer模式
  2. 面向对象--第三部分
  3. [ python ] 正则表达式及re模块
  4. 查询一个表中某个字段最大值的集合
  5. Python之路,day3-Python基础
  6. spring实战六之使用基于java配置的Spring
  7. linux sort 命令详解
  8. 类中成员函数声明后面的const的含义
  9. dram和nand哪个难生产_DRAM与NAND差别这么大,存储之争都争啥
  10. Linux中如何将文件dump成16进制值