C程序语言10B_C

C++程序设计实用教程 清华大学出版社 2008 第10章 构造函数与赋值运算 构造函数 析构函数 拷贝构造函数 赋值运算 组合成员的构造 *趣味程序———模拟银行打印储户存折 小结 10.3 拷贝构造函数 对于基本数据类型int,定义整型变量及初始化: int a, b=3;// 默认初始化、显式初始化 int c=a, d=b;// 用已经存在的变量初始化新变量 对于构造的类类型呢? Student s1, s2 = ; Student s3=s1, s4=s2; 可知 用默认构造函数构造对象 s1 用转换构造函数构造对象 s2 问题:用什么构造函数构造 s3 和 s4? 答:这样的构造函数的形式参数似乎应该为本类的对象 10.3 拷贝构造函数 对于构造的类类型呢? Student s1, s2 = ; Student s3=s1, s4=s2; 用已经存在的对象初始化新创建的对象。需要新的构造函数。新构造函数的首部应该是怎样的? 函数名 ——— 类名 返回类型 ——— 无 形式参数 ——— ? 问:新构造函数的首部应该选择如下的哪一个? Student(Student s) Student(const Student *s) Student(const Student &s) 10.3 拷贝构造函数 问:新构造函数的首部应该选择如下的哪一个? Student(Student s) 参数为值传递,即用实参(已经存在的对象)初始化形参(新创建的对象)本身需要拷贝构造函数。形成逻辑上的循环定义。 Student(const Student *s) 这将是一个一般的构造函数(重载构造函数),实际参数为已经存在的对象的地址值。即如下语句将使用该函数Student s1;Student s3 = &s1;// 取对象s1的地址作实参,并非用对象s1作实参 Student(const Student &s) Student s3 = s1;// 正确!用s1作实参初始化引用型形参s,不创建对象。// 用const限制是为了保护实参不被函数体修改。 10.3 拷贝构造函数 在类体中声明拷贝构造函数,其函数原型的格式为 类名(const 类名&); 在类体外定义拷贝构造函数,其格式如下 类名::类名(const 类名 &形式参数) { // 执行语句 } 10.3 拷贝构造函数 用拷贝构造函数创建对象时,将不再调用其他的构造函数。 亦即,构造函数、拷贝构造函数均是创建对象时所用的函数,它们使用的场合不同。 声明一个类时若未定义拷贝构造函数,则编译系统会为该类提供一个默认的拷贝构造函数。 默认的拷贝构造函数按对象的数据成员(数组成员则按每一个元素)依次调用成员的拷贝构造函数进行拷贝构造。 若在声明类时定义了拷贝构造函数,则系统将不再提供拷贝构造函数,拷贝构造函数亦不能被重载。 每个类有且仅有一个拷贝构造函数。 10.3 拷贝构造函数 拷贝构造函数被调用的总原则:当用一个已经存在的对象初始化一个正在创建的对象时,调用拷贝构造函数。有如下三种常见场合 (1) 创建新对象时,用一个已经存在的对象作为初始化值 (2) 调用函数时,用实参(已经存在的对象)初始化值传 递的形参(新创建的对象) (3) 函数类类型对象值返回时,用函数所返回的表达式 (一个已经存在的对象)初始化值返回时创建的临时 对象(参见第3.2.2小节的注) 与构造函数、析构函数一样,拷贝构造函数的形式是容易辨认的。拷贝构造函数由系统自动调用。 然而,何时调用了拷贝构造函数则需要读者概念清楚加上细心。 10.3 拷贝构造函数 对于上述(2)-(3)两点,常称创建了对象的副本 值传递型形式参数对象(实参对象的副本) 函数值返回时创建的临时对象(返回值的副本) 创建副本需要花费时间和内存空间。因此,在今后的函数设计中,应该尽可能地使用引用型形式参数、引用返回类型来避免拷贝构造对象。一般是在不得已的情况下才采用值传递、值返回。 然而,引用型形式参数传递即传递了对象本身,对引用型形式参数的修改,即是对实参对象的修改 将形式参数设计成常量的引用(const),既可以避免拷贝构造,又可以保护实参。 不仅如此,调用这样的函数还能用常量对象作为实参。 10.3.1 浅拷贝构造 ——— 拷贝对象基本空间的数据成员 在拷贝构造对象时,仅根据对象基本空间的数据成员拷贝者被称为浅拷贝构造。 系统提供的默认拷贝构造函数只执行浅拷贝操作(此时,取决于其各个成员的拷贝构造函数。参见第10.5节)。 10.3.1 浅拷贝构造 下面将围绕名称类的设计,按“初步

c语言10B,C++程序语言10B_C.ppt相关推荐

  1. c语言使用求余方式的转化为二进制程序,C语言第三讲 程序结构 (下).ppt

    <C语言第三讲 程序结构 (下).ppt>由会员分享,可在线阅读,更多相关<C语言第三讲 程序结构 (下).ppt(24页珍藏版)>请在人人文库网上搜索. 1.1,第三讲 程序 ...

  2. 第四代语言计算机语言,第四代程序设计语言是什么程序语言

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 第四代语言是非过程化的程序设计语言,用户只说明要求做什么,而把具体的执行步骤交由软件自动执行. 程序设计语言是用于书写计算机程序的 ...

  3. 求直角边的斜边c语言,使用多种程序语言编程:已知斜边与一直角边,通过勾股定理求另外一直角边,50分起价,多一个正确回答加100分(并非刷分,请不要误解)...

    满意答案 zhjp0412 2014.08.10 采纳率:40%    等级:9 已帮助:214人 common lisp版(刚学的,献丑了- -): (defun gougu(x y) (setq ...

  4. 软件中级设计师 - 程序语言设计

    程序设计语言基本概述 程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行 描述.组织和推导. 低级语言:机器语言(计算机硬件只能识别0和1的指令序列),汇编语言. 高级语言:功能 ...

  5. c语言是非结构化程序语言_一个资深C语言工程师说C语言的重要性!直言道:不学C学什么?...

    前言 C语言属于高级程序语言的一种,它的前身是"ALGOL".其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇.C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上.然而随着科 ...

  6. 与汇编语言相比c语言,汇编语言与C语言有什么区别

    1.操作复杂程度的不同 c语言,与汇编语言相比,c语言在更加接近人的一般思维,因此在程序的设计过程中比较容易操作,此外在进行一些复杂的操作,运算时,c语言比汇编就要简单很多,尤其是c语言中的丰富的函数 ...

  7. c语言程序设教材计 乌云高娃,C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt...

    C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt 主要内容 课程概述 为什么选择C语言作为入门课程? C语言 ...

  8. 小组c语言程序项目ppt,C语言程序设计项目八.ppt

    <C语言程序设计项目八.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计项目八.ppt(18页珍藏版)>请在人人文库网上搜索. 1.项目工程8学生成绩文件管理,项目工程 ...

  9. 让五个数都不相等的程序c语言,C语言程序设计课件第05讲.ppt

    <C语言程序设计课件第05讲.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计课件第05讲.ppt(28页珍藏版)>请在人人文库网上搜索. 1.if语句 switch语 ...

最新文章

  1. 【Qt】QtCreator中的单例编程(以ActionManager为例)
  2. TFS2008自定义过程模板之 Power Tools 工具篇
  3. tp5上传文件并获取文件路径_TP5上传文件
  4. 大型Web2.0站点构建技术初探一
  5. 贝塞尔曲线工具css,如何反转CSS中的贝塞尔曲线的实现方法
  6. java 判断一个字符串是否由数字组成的_Java中怎样判断一个字符串是否是数字
  7. 划分子网后的三级结构
  8. Struts框架详解
  9. Google Play的崩溃与ANR
  10. 苹果电脑可以装windows系统吗_给苹果电脑安装Windows系统
  11. Notion 的插件介绍和使用
  12. 联接无止境!500万台AP潜在大数据流量入口
  13. 计算机右下角时间格式,电脑右下角时间格式_电脑右下角时间不准
  14. java端实现对数据库的增加
  15. Linux 中power supply软件架构和相关API
  16. 2个人怎么一起玩军旗游戏_让我们一起玩:建立游戏社区
  17. 在VMware上如何创建虚拟机以及安装Linux操作系统
  18. 使用联机搜索求解Wumpus World
  19. android:sharedUserId=android.uid.system 的使用
  20. 离散傅立叶变换与逆变换

热门文章

  1. label 字体添加中划线和下划线
  2. 鸡啄米之VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)
  3. 软件包管理工具snap的安装及常用命令
  4. 多模态机器学习简述(Guide to Multimodal Machine Learning)
  5. linux命令:查询某个字符串在哪个文件中存在,贼拉管用!
  6. 荷露叮咚wp建站系列视频课程.3WordPress功能菜单介绍
  7. 设置单选框只能选择一个
  8. 嵌入式软件测试(黑盒测试)-----三年嵌入式软件测试的理解
  9. libigl第五章-参数化
  10. oracle里long类型的总结