- 17
- 0
- 约9.25千字
- 约 35页
- 2017-12-26 发布于河北
- 举报
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 浅拷贝构造 下面将围绕名称类的设计,按“初步设计→发现
您可能关注的文档
- 4 水路及废液系统.ppt
- 4-2方差.ppt
- 4-重载-构造函数.ppt
- 4-定量分析 b.ppt
- 4-非线性规划.ppt
- 4.1.2从不同的方向看_课件_新人教版七上[一].ppt
- 4-3装配图的识读.ppt
- 4.1多媒体作品中的动画、视频(xuanxiu).ppt
- 4.1测试装置的基本特性.ppt
- 4.2.2降水课件.ppt
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 2020四川既有及小区改造房屋建筑维修与加固工程说明及计算规则.pdf VIP
- 稀土永磁行业深度报告:供需向好看涨稀土,机器人催生新机遇.docx
- Inspur浪潮存储平台 AS5300G5&AS5500G5 产品白皮书 V2.0说明书用户手册.pdf
- 河北省高考物理一轮复习万有引力定律5.2 万有引力定律课件 .ppt VIP
- 牡丹切花品种筛选及采后技术研究.pdf VIP
- 复方口服避孕药临床应用专家共识(2025).pptx VIP
- 《心血管护理过程质控工具包(试用版)》2024.8.pdf VIP
- 中国徒步定向运动竞赛规则-讲解.pdf VIP
- 毕业设计(论文)-落叶清扫机设计.docx
- PICC进修汇报PPT课件.pptx VIP
原创力文档

文档评论(0)