当前位置:文档之家› C++第五章_类与对象习题解答

C++第五章_类与对象习题解答

第五章类与对象习题一.基本概念与基础知识自测题填空题引入类定义的关键字是(1)。

类的成员函数通常指定为(2),类的数据成员通常指定为(3)。

指定为(4)的类成员可以在类对象所在域中的任何位置访问它们。

通常用类的(5)成员表示类的属性,用类的(6)成员表示类的操作。

答案:(1)class(2)公有的public(3)私有的private(4)公有的public(5)数据(6)/(7)函数类的访问限定符包括(1)、(2)和(3)。

私有数据通常由(4)函数来访问(读和写)。

这些函数统称为(5)。

答案:(1)public(公有的)(2)private(私有的)(3)protected(保护的)(4)公有的成员函数(5)类的接口通常在逻辑上,同一类的每个对象都有(1)代码区,用以存储成员函数。

而在物理上通常只有(2)代码区。

只有在(3)定义,并(4)的函数和加了关键字(5)的函数例外。

答案:(1)?(2)独立的(3)共用的(4)在类说明中(5)不包括循环等复杂结构(6)inlineC++中支持三种域:(1)、(2)、(3)。

函数域被包括在(4)中,全局域被包括在(5)中。

using指示符以关键字using开头,后面是关键字(6),最后是(7)。

这样表示以后在该名字空间中所有成员都(8)。

如不使用using指示符则在使用时要加::,称为(9)运算符。

答案:(1)局部域(local scope)(2)名字空间域(namespace scope)(3)类域(class scope)(4)?(5)局部域(6)名字空间域(7)namespace(8)名字空间名(9)可以直接被使用(10)域引用通常用作函数的(1)和(2)。

对数组只能引用(3)不能引用(4)。

答案:(1)参数(2)返回值(3))(4)数组元素(5)数组名本身构造函数的任务是(1)和(2)。

构造函数无(3),但并不表示(4)。

类中可以有(5)个构造函数,它们由(6)区分。

如果类说明中没有给出构造函数,则C++编译器会(7)。

拷贝构造函数的参数是(8),当程序没有给出拷贝构造函数时,系统会自动提供(9)支持,这样的拷贝构造函数中每个类成员(10)。

答案:(1)建立对象(为对象分配内存)(2)初始化数据成员(3)函数返回类型说明(4)没有返回值,返回的是构造函数所创建的对象(5)多(6)不同的参数表(7)-(8)自动给出一个缺省的构造函数(9)同一类对象的引用(10)缺省的拷贝构造函,称为缺省的按成员语义支持。

(11)被依次拷贝一个类有(1)个析构函数。

(2)时,系统会自动调用析构函数。

答案:(1)一(2)对象注销时运算符重载时,其函数名由(1)构成。

成员函数重载双目运算符时,左操作数是(2),右操作数是(3)。

答案:(1)@(2)关键字operator和该运算符(3)对象(4)该函数的参数5.2简答题(以下习题题号可能和教材不一致!)5.2.1为什么返回值为引用的函数可以作为左值答:函数返回引用实际是指明(返回)了相应的关联变量,所以声明返回值为引用的函数实际上是将关联变量作为左值参与运算。

5.2.2什么是缺省的构造函数缺省的构造函数最多可以有多少个&答:如果在类定义中不显式地定义构造函数,C++编译器会自动产生一个缺省的构造函数,不过该函数不做具体的初始化工作。

只要构造函数是无参的或者只要各参数均有缺省值的,C++编译器都认为是缺省的构造函数。

缺省的构造函数只能有一个。

5.2.3拷贝构造函数用于哪三个方面答:(1)用类的一个对象去初始化该类的另一个对象时使用。

(2)当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。

(3)当函数的返回值是类对象,函数执行结束返回调用者时使用。

5.2.4所有类对象未重载的赋值运算符“=”是怎样工作的为什么它可以进行连续赋值答:对所有的类对象,未重载的赋值运算符“=”称作缺省的按成员拷贝赋值操作符,同类对象之间可以用“=”直接拷贝。

因为缺省的赋值操作返回一个对象的引用,所以它可以进行连续赋值。

[5.2.5为什么在友元函数的函数体内访问对象成员时,必须用对象名加运算符“.”再加对象成员名答:友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符“.”加对象成员名。

这一点和一般函数一样。

5.2.6重载复数运算符+时,采用下面友元函数声明:friend Complex operator+(Complex &c1,Complex &c2);为什么不能用于“实数+复数”怎样改进才能适用为什么答:使用引用类型变量作为运算符重载函数的参数,身为左值的实数类型实参不能被转换为复数,编译时无法通过。

添加const说明,使实数到复数的转换隐式地在一份拷贝上进行,则可以实现“实数+复数”运算。

修改后的说明为:friend Complex operator+(constr Complex &c1, const Complex &c2);5.2.7·5.2.8C++中结构、联合与类三者间有何异同答:在C++中结构(structure)与类几乎是完全一样的类型,差别仅仅在于缺省情况下结构的成员为公有的。

联合(union)是C++的导出数据类型,在语法与功能上类似于结构,二者的区别是:结构变量的各成员同时被分配了各自独立的内存区,而联合变量的各个成员的存储开始地址都相同,所以在任一时刻联合变量只能存储一个成员。

二.编程与综合练习题构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,其中年、月请用枚举类型,并完成测试。

(包括用成员函数和用普通函数)解:本题要求仅是定义类的练习,并非实用的提供日期时间的程序。

实用的日期时间程序见附录二的日期时间函数。

#include <>#include <>#include <>enum YR{Y2000,Y2001,Y2002,Y2003,Y2004,Y2005};`Circumference=2*r*3.;}Circle::Circle(Circle & cl){r=;Area=;Circumference=;}void Circle::SetR(double R){r=R;《Area=r*r*3.;Circumference=2*r*3.;}void main(){Circle cl1(2),cl2,cl3=cl1;cout<<"圆半径:"<<()<<'\t'<<"圆周长:"<<()<<'\t'<<"圆面积:"<<()<<endl;(4);cout<<"圆半径:"<<()<<'\t'<<"圆周长:"<<()<<'\t'<<"圆面积:"<<()<<endl;.}5.4设计一个学校在册人员类(Person)。

数据成员包括:身份证号(IdPerson),姓名(Name),性别(Sex),生日(Birthday)和家庭住址(HomeAddress)。

成员函数包括人员信息的录入和显示。

还包括构造函数与拷贝构造函数。

设计一个合适的初始值。

解:本题为指出构造函数等的调用,加了一些提示语句。

#include<>#include<>enum Tsex{mid,man,woman};class Person{char IdPerson[19];假设某城市人人所得税的税基为2000元,而其征收个人所得税的规定如下:不超过税基免征税,按超过税基部分征收所得税。

超过部分在2000元以下,征税5%;5000元以下,征税10%;10000元以下,征税15%;10000元以上,征税20%。

建立一个incomec类,共包含的数据成员和成员函数如下:\income数据成员,表示职工的实际收wage静态数据成员,表示职工工资taxrate静态数据成员,表示税率setWage(double m)成员函数,设置工资值getTaxrate()静态成员函数,计算税率calIncome()静态成员函数,计算职工的实际收入在主函数中,实例化不同的incomec类对象,并计算它们的实际收入。

#include<iostream>using namespace std;class incomec{private:float income;static float wage;static float taxrate;public:incomec(){income=0;}void setWage(double);static float getTaxrate();static void callcome();};float incomec::taxrate=;float incomec::wage=3000;void incomec::setWage(double w){wage=w;}void incomec::callcome(){float all,super;super=wage-2000;all=2000+super*(1-getTaxrate());cout<<"职工的实际工资为:"<<all<<endl;cout<<endl;}float incomec::getTaxrate() {float left=wage-2000;if(left<2000){taxrate=;}else if(left<5000){taxrate=;}else if(left<10000){taxrate=;}else{taxrate=;}return taxrate;}void main(){incomec a1;(20000);();incomec a2;(20000);cout<<"税率为:"<<()<<endl; ();}。

相关主题