c++语言程序设计课后答案
更新时间:2024-04-28 01:44:01 阅读量: 综合文库 文档下载
2-20运行下面的程序,观察其输出,体会 i++与++i的差别。 #include
int myAge = 39; // initialize two integers int yourAge = 39;
cout << \ cout << \ myAge++; // postfix increment ++yourAge; // prefix increment cout << \
cout << \ cout << \ cout << \
cout << \ cout << \
cout << \ cout << \ return 0; } 解:
程序运行输出: I am 39 years old You are 39 years old One year passes I am 40 years old You are 40 years old Another year passes I am 40 years old You are 41 years old Let's print it again I am 41 years old You are 41 years old
3-4 什么叫内联函数 ?它有哪些特点? 解:
定义时使用关键字 inline的函数叫做内联函数;编译器在编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销;内联函数体内不能有循环语句和 switch语句;内联函数的定义必须出现在内联函数第一次被调用之前;对内联函数不能进行异常接口声明;
3-5 函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必须一致吗? 解:
不必一致,所有的参数是根据位置和类型而不是名字来区分的。
1 / 9
3-6 调用被重载函数时,通过什么来区分被调用的是哪个函数? 解:
重载的函数的函数名是相同的,但它们的参数的个数和数据类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。
3-11什么叫作嵌套调用?什么叫作递归调用? 解:
函数允许嵌套调用。如果函数1调用了函数 2,函数 2再调用函数 3,便形成了函数的嵌套调用。函数可以直接或间接地调用自身,称为递归调用。
4-3 构造函数和析构函数有什么作用? 解:
构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态,使此对象具有区别于彼对象的特征,完成的就是是一个从一般到具体的过程,构造函数在对象创建的时候由系统自动调用。析构函数与构造函数的作用几乎正好相反,它是用来完成对象被删除前的一些清理工作,也就是专门作扫尾工作的。一般情况下,析构函数是在对象的生存期即将结束的时刻由系统自动调用的,它的调用完成之后,对象也就消失了,相应的内存空间也被释放。
4-4 数据成员可以为公有的吗?成员函数可以为私有的吗? 解:
可以,二者都是合法的。数据成员和成员函数都可以为公有或私有的。但数据成员最好定义为私有的。
4-6 什么叫做拷贝构造函数?拷贝构造函数何时被调用? 解:
拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用,其作用是使用一个已经存在的对象,去初始化一个新的同类的对象。在以下三种情况下会被调用:在当用类的一个对象去初始化该类的另一个对象时;如果函数的形参是类对象,调用函数进行形参和实参结合时;如果函数的返回值是类对象,函数调用完成返回时;
4-7 拷贝构造函数与赋值运算符 (=)有何不同? 解:
赋值运算符 (=)作用于一个已存在的对象;而拷贝构造函数会创造一个新的对象。
4-11定义一个矩形类,有长、宽两个属性,有成员函数计算矩形的面积 解:
#include
Rectangle(float len, float width) {
Length = len; Width = width; }
~Rectangle(){};
float GetArea() { return Length * Width; } float GetLength() { return Length; }
2 / 9
float GetWidth() { return Width; } private: float Length; float Width; }; void main() {
float length, width;
cout << \请输入矩形的长度:\ cin >> length;
cout << \请输入矩形的宽度:\ cin >> width;
Rectangle r(length, width);
cout << \长为\宽为\的矩形的面积为:\ }
程序运行输出: 请输入矩形的长度:5 请输入矩形的宽度:4
长为 5、宽为 4的矩形的面积为: 20
5-1 什么叫做作用域?有哪几种类型的作用域? 解:
作用域讨论的是标识符的有效范围,作用域是一个标识符在程序正文中有效的区域。 C++的作用域分为函数原形作用域、块作用域(局部作用域)、类作用域和文件作用域.
5-2 什么叫做可见性?可见性的一般规则是什么? 解:
可见性是标识符是否可以引用的问题;可见性的一般规则是:标识符要声明在前,引用在后,在同一作用域中,不能声明同名的标识符。对于在不同的作用域声明的标识符,遵循的原则是:若有两个或多个具有包含关系的作用域,外层声明的标识符如果在内层没有声明同名标识符时仍可见,如果内层声明了同名标识符则外层标识符不可见。
5-3 下面的程序的运行结果是什么,实际运行一下,看看与你的设想有何不同。 #include
cout << \ cout << \ myFunction();
cout << \ cout << \ cout << \ return 0;
3 / 9
}
void myFunction() {
int y = 10;
cout << \ cout << \ } 解:
程序运行输出: x from main: 5 y from main: 7 x from myFunction: 5 y from myFunction: 10 Back from myFunction! x from main: 5 y from main: 7
5-4 假设有两个无关系的类 Engine和 Fuel,使用时,怎样允许 Fuel成员访问 Engine中的私有和保护的成员? 解: 源程序: class fuel; class engine {
friend class fuel; private:
int powerLevel; public:
engine(){powerLevel = 0;} void engine_fn(fuel &f); }; class fuel {
friend class engine; private: int fuelLevel; public:
fuel(){ fuelLevel = 0;} void fuel_fn( engine &e); };
6-2 在数组 A[20]中第一个元素和最后一个元素是哪一个? 解:
第一个元素是 A[0],最后一个元素是 A[19]。
4 / 9
6-7 什么叫做指针?指针中储存的地址和这个地址中的值有何区别? 解:
指针是一种数据类型,具有指针类型的变量称为指针变量。指针变量存放的是另外一个对象的地址,这个地址中的值就是另一个对象的内容。
6-10定义一个有五个元素的int型数组,在程序中提示用户输入元素值,最后再在屏幕上显示出来。 解:
#include
int myArray[5]; int i;
for ( i=0; i<5; i++) {
cout << \ cin >> myArray[i]; }
for (i = 0; i<5; i++)
cout << i << \ return 0; }
程序运行输出: Value for myArray[0]: 2 Value for myArray[1]: 5 Value for myArray[2]: 7 Value for myArray[3]: 8 Value for myArray[4]: 3 0: 2 1: 5 2: 7 3: 8 4: 3
6-17 下列程序有什么问题,请仔细体会使用指针时应该如何避免出现这个问题。 解:
指针 p没有初始化,也就是没有指向某个确定的内存单元,它指向内存中的一个随机地址,给这个随机地址赋值是非常危险的。
6-18下列程序有何问题,请改正;仔细体会使用指针时应避免出现的这个问题。 #include
5 / 9
int a = Fn1();
cout << \ return 0; } int Fn1() {
int * p = newint (5); return *p; } 解:
此程序中给*p分配的内存没有被释放掉。 改正:
#include
int *p=new int(5); return p; } int main() {
int *a=fn1();
cout<<\ delete a; return 0; }
7-2 派生类构造函数执行的次序是怎样的? 解:
派生类构造函数执行的一般次序为:调用基类构造函数;调用成员对象的构造函数;派生类的构造函数体中的内容。
7-4 什么叫做虚基类?有何作用? 解:
当某类的部分或全部直接基类是从另一个基类派生而来,这些直接基类中,从上一级基类继承来的成员就拥有相同的名称,派生类的对象的这些同名成员在内存中同时拥有多个拷贝,我们可以使用作用域分辨符来唯一标识并分别访问它们。我们也可以将直接基类的共同基类设置为虚基类,这时从不同的路径继承过来的该类成员在内存中只拥有一个拷贝,这样就解决了同名成员的唯一标识问题。虚基类的声明是在派生类的定义过程,其语法格式为: class 派生类名: virtual继承方式基类名上述语句声明基类为派生类的虚基类,在多继承情况下,虚基类关键字的作用范围和继承方式关键字相同,只对紧跟其后的基类起作用。声明了虚基类之后,虚基类的成员在进一步派生过程中,和派生类一起维护一个内存数据拷贝。
7-6 定义一个哺乳动物 Mammal类,再由此派生出狗 Dog类,定义一个 Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。 解: 源程序:
#include
enum myColor{BLACK,WHITE};
6 / 9
class Mammal {
public: //构造函数 Mammal();
~Mammal(); //访问数据成员 int GetAge() const{return itsAge;} void SetAge(int age){itsAge=age;} int GetWeight() const {return itsWeight;}
void SetWeight(int weight){itsWeight=weight;} //其他函数 void Speak() const {cout<<\ protected: int itsAge; int itsWeight; };
class Dog:public Mammal { public: Dog(); ~Dog();
myColor GetColor() const{return itsColor;} void SetColor (myColor color){itsColor=color;} void WagTail(){cout<<\\\n\ private:
myColor itsColor; };
Mammal::Mammal():itsAge(1),itsWeight(5){ cout<<\\\n\ }
Mammal::~Mammal(){
cout<<\\\n\ }
Dog::Dog():itsColor(WHITE){ cout<<\\\n\ }
Dog::~Dog() {
cout<<\\\n\ } int main() {
Dog Jack; Jack.Speak(); Jack.WagTail();
cout<<\ return 0;
7 / 9
}
7-7 定义一个基类,构造其派生类,在构造函数中输出提示信息,观察构造函数的执行情况。 解:
#include
BaseClass::BaseClass() {
cout << \构造基类对象!\ }
class DerivedClass : public BaseClass { public:
DerivedClass(); };
DerivedClass::DerivedClass() {
cout << \构造派生类对象!\ }
void main() {
DerivedClass d; }
程序运行输出: 构造基类对象!
8-1 什么叫做多态性 ?在 C++中是如何实现多态的? 解:
多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。 C++支持的多态有多种类型,重载 (包括函数重载和运算符重载 )和虚函数是其中主要的方式。
8-2 什么叫做抽象类?抽象类有何作用?抽象类的派生类是否一定要给出纯虚函数的实现? 解:
带有纯虚函数的类是抽象类。抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性。抽象类声明了一组派生类共同操作接口的通用语义,而接口的完整实现,即纯虚函数的函数体,要由派生类自己给出。但抽象类的派生类并非一定要给出纯虚函数的实现,如果派生类没有给出纯虚函数的实现,这个派生类仍然是一个抽象类。
8-5 编写一个哺乳动物类Mammal,再由此派生出狗类Dog ,两者都声明Speak()成员函数,该函数在
基类中被声明成虚函数,声明一个Dog类的对象,通过此对象调用Speak函数,观察运行结果 解:
#include
8 / 9
class Mammal { protected: char name[10]; public: virtual void set() {
strcpy(name,\哈哈\ }
virtual void speak() {
cout<<\这是哺乳动物\} };
class Dog:public Mammal { public: void set() {
strcpy(name,\哈哈\}
void speak() {
cout<<\这是哺乳动物:狗\} };
void fun(Mammal &s) { s.speak(); }
void main() {
Mammal m1; Dog d2; fun(m1); fun(d2); }
运行结果: 这是哺乳动物 这是哺乳动物:狗
9 / 9
正在阅读:
c++语言程序设计课后答案04-28
关于通信开关电源的维护和管理的几点思考03-12
远足感想作文02-05
proe 5.0 安装教程以及下载06-01
论文 如何提高小学生的阅读能力07-05
安徽省滁州市定远县育才学校2019届高三地理上学期第一次月考试题06-30
高中化学反应中的能量变化重要知识点总结05-21
2019最新中考物理第二部分专题研究专题七坐标曲线类题试题01-15
JavaScript试题集04-05
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- c++
- 课后
- 程序设计
- 答案
- 语言
- 慢性主观性眩晕的生物反馈治疗
- lab15 语义分析与中间代码生成2
- 卢氏县十二五发展规划纲要
- 数据库第一、二、三章课后习题答案
- 2018-2019学年高中新创新一轮复习地理中图版: 外力作用与岩石圈
- java课程设计 - 图文
- 电子商务环境下家电连锁零售企业的发展问题研究
- 吉林省长春市朝阳区2016届中考数学一模试卷(含答案)
- 家校教育典型事例
- 13审计专业人才培养方案
- 市政道路及给排水工程可研报告
- 安徽省郎溪中学2018届高三下学期考前仿真模拟考试理综-化学试题
- 嵌入式CISC模型机设计
- 2016科学技术奖获奖项目科技进步奖一等奖13项1抗疏力技术在
- 2010年注册规划师规划原理真题
- 临高县科技管理2018年工作总结和2019年工作计划
- 居家养老服务规范doc
- 计算机网络工程4、5次作业
- 村镇银行的背景、意义及概况
- 机电一体化毕业设计论文2012