《C++程序设计教程 第2版》教学素材习题13答案
更新时间:2023-10-16 21:56:01 阅读量: 综合文库 文档下载
- c程序设计教程第四版答案推荐度:
- 相关推荐
习题13答案
一、简答题
1.什么是运算符重载?实现运算符重载有几种方法?如何实现? 答案:运算符重载机制能够实现将已有运算符应用到新的数据类型上,赋予运算符新的含义。C++对运算符重载有一些限制,见13.2.1节。
有两种方法可以实现运算符重载,它们是:类的成员函数实现方式和友元函数实现方式。 定义友元的目的是在友元函数中直接访问类的私有成员。实际上,可以通过类的公有函数接口访问类的私有成员,所以对于运算符重载,可以使用非成员、非友元函数实现。但是这种实现方法增加了访问私有数据成员的公有函数的调用时间,不值得提倡。见13.2.2节。
2.如何实现本类对象与其它类对象之间的相互类型转换?
答案:使用运算符重载中的“类型转换函数”将本类对象转换成其他类对象。使用“构造函数”将其他类对象转换成本类对象。
3.什么是虚函数?什么是纯虚函数?它们的作用是什么? 答案:
多态性是面向对象程序设计的重要特性,它与封装性和继承性构成面向对象程序设计的三大特性。这三大特性是互相关联的,封装性是基础,继承性是关键,而多态性是补充。
多态分为静态多态和动态多态。函数重载和运算符重载属于静态多态。静态多态也称为编译时多态。而动态多态是运行时的多态,如某些函数的调用关系在运行阶段才能确定。为了实现函数调用关系的动态多态,可以将函数定义成虚函数。将一个成员函数定义成虚函数的方法是,在函数定义的返回值类型前加关键字virtual。
在抽象类中,有时无法实现某一功能(即无法给出某一函数的具体实现),可以将实现该功能的函数定义成纯虚函数。
虚函数具有函数实现的函数体,而纯虚函数一般没有函数体,即没有函数实现。对纯虚函数,一般只能在其派生类中实现该函数的功能。
4.试比较虚函数与虚基类的概念及作用。 答案:虚函数用于实现动态多态。虚基类用于实现在多重继承情况下基类同名成员在派生类中的访问二义性问题。如果基类是虚基类,则同名数据成员在派生类中只保留一个副本,见12.6节。
二、选择题 答案:
1. C 2. D 3. A 4. D 5. B 6. D 7. D 8. C 9. D
三、运行结果、完善程序 1.
运行结果: n=4 n=3 2, 3
2. 答案:
先看虚线框中的程序,运行结果为: D::show( ) called. 8 若将A行的virtual去掉,则结果为: B::show( ) called. 5
对本题,若将虚线框中的fun( )和main( )函数同时修改成右侧实线框中的对应函数,则若A行有virtural时,结果为: D::show( ) called. 8 ; 若A行无virtual时,结果为: B::show( ) called. 5 。 3.
运行结果为: The B version B
The D1 info: 4 version 1 The D2 info: 100 version B The D3 info: -25 version 3
去掉A行的virtual,则运行结果为: The B version B The B version 1 The B version B The B version 3 4. 答案:
(1)operator char *( ) (2)return s; (3)str = num;
四、编程题 1. 答案:
// 实现1,赋值运算符重(=和+=)载函数的返回值为对象的引用。 // 缺点:不可实现对象的连续赋值,只能 c1= c2
#include
class Complex { float Real, Image; public: Complex(float r=0,float i=0) { Real=r;Image=i; }
void show( ) { cout<<\ } void operator=(Complex &); //用成员实现,注意:=不能用友元实现 void operator+=(Complex &); //用成员实现,+=可以用友元实现 friend Complex operator+(Complex &,Complex &); //用友元实现 friend Complex operator-(Complex &,Complex &); //用友元实现 };
void Complex:: operator=(Complex &c) //返回值 void { Real=c.Real; Image=c.Image; }
void Complex:: operator+=(Complex &c) //返回值 void { Real=Real+c.Real; Image=Image+c.Image; }
Complex operator+(Complex &c1, Complex &c2) { Complex t; t.Real=c2.Real+c1.Real; t.Image=c2.Image+c1.Image; return t; }
Complex operator-(Complex &c1, Complex &c2) { Complex t; t.Real=c1.Real-c2.Real; t.Image=c1.Image-c2.Image; return t; }
void main( ) { Complex c1(1,2),c2(3,4),c3; c3=c1; c3.show( ); c3=c1+c2; c3.show( ); c3+=c2; c3.show( ); c3=c1-c2; c3.show( ); }
// 实现2,赋值运算符重(=和+=)载函数的返回值为对象的引用。 // 优点:可实现对象的连续赋值,如 c1=c2=c3
#include
class Complex { float Real, Image; public: Complex(float r=0,float i=0) { Real=r;Image=i; } void show( ) { cout<<\ } Complex & operator=(Complex &); //用成员实现,注意:=不能用友元实现 Complex & operator+=(Complex &); //用成员实现,+=可以用友元实现 friend Complex operator+(Complex &,Complex &); //用友元实现 friend Complex operator-(Complex &,Complex &); //用友元实现 };
Complex & Complex:: operator=(Complex &c) //返回值为对象的引用 { Real=c.Real; Image=c.Image; return *this; }
Complex & Complex:: operator+=(Complex &c) //返回值为对象的引用 { Real=Real+c.Real; Image=Image+c.Image; return *this; }
Complex operator+(Complex &c1, Complex &c2) { Complex t; t.Real=c2.Real+c1.Real; t.Image=c2.Image+c1.Image; return t;
}
Complex operator-(Complex &c1, Complex &c2) { Complex t; t.Real=c1.Real-c2.Real; t.Image=c1.Image-c2.Image; return t; }
void main( ) { Complex c1(1,2),c2(3,4),c3; c3=c2=c1; c3.show( ); c3=c1+c2; c3.show( ); c3+=c2; c3.show( ); c3=c1-c2; c3.show( ); } 2. 答案:
#include
class Fraction { int m, n; // m 是分子,n 是分母 public: Fraction(int im=0,int in=1) { int t=gcd(im,in); m=im/t; n=in/t; if(m*n>0) // 若分子和分母同号 { m=abs(m); n=abs(n); } else // 若分子和分母异号 { m=-abs(m); n=abs(n); }; }
int gcd(int x,int y);
Fraction & operator= ( Fraction b ) {
正在阅读:
《C++程序设计教程 第2版》教学素材习题13答案10-16
差旅费管理办法09-10
四川省成都七中2013-2014高二下学期期中考试理科数学试题(含答案解析)(2014.04)08-19
废纸再生造纸的废水处理技术09-06
邮政储蓄中级工考试05-20
千秋遗爱在人间11-27
实验二 离心泵特性曲线测定08-29
《当代中国与世界认识方法》课后作业答案09-22
开学啦作文300字07-06
allow的用法(句型搭配)02-12
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- C++
- 教学素材
- 设计教程
- 习题
- 答案
- 程序
- 开题报告
- 部编版三年级语文下第三单元教案 - 图文
- 农村 各种房屋 设计图
- 小学二年级上册数学解决问题复习 - 图文
- 中国民生银行呆账核销管理办法
- 高频电子线路复习题(含答案)
- 论改善民生的重要意义和主要途径
- WORD 2007删除页眉横线
- 数学分布(泊松分布、二项分布、正态分布、均匀分布、指数分布)+生存分析+贝叶斯概率公式+全概率公式
- 7.独轮手推车模型的认识与设计
- 小学三年级数学第五册第一单元《测量》测试卷
- NRC肉鸡营养需要
- 《保护臭氧层维也纳公约》缔约方大会
- 湘教版四年级上册科学教案
- 大物上册习题
- 变频压缩机的发展
- UNIX操作系统
- 人教版三年级下册数学第二单元测试题
- 大物习题答案9
- 浅谈学生钳工实习操作技能和技巧的提高