内蒙古科技大学C++第四章习题答案Word文件下载.docx
《内蒙古科技大学C++第四章习题答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《内蒙古科技大学C++第四章习题答案Word文件下载.docx(16页珍藏版)》请在冰点文库上搜索。
5.对任意一个类,析构函数的个数最多为(B)个。
.
6.通常拷贝构造函数的参数是(D)。
A.某个对象名
B.某个对象的成员名
C.某个对象的指针名
D.某个对象的引用名
7.已知A是一个类,则执行语句Aa;
时,将自动调用该类的(B)。
A.有参构造函数
B.无参构造函数
C.拷贝构造函数
D.赋值构造函数
二、简答题
1.比较C++中的结构(struct)和类(class)的概念的相同和不同之处。
答:
相同处:
struct和class都可以包含成员函数和数据成员,struct和class都可以继承,struct和class都可以实现多态
不同处:
struct和class的默认继承访问权限不同,struct默认是public的,class默认是private
2.类中的公有(public)成员和私有(private)成员有什么区别?
公有权限的数据成员或成员函数可以作为与外界联系的公共接口,由外界访问,称为类的外部接口,外界只能通过公有成员这个借口与类发生联系.共有成员不仅可以由该类的成员函数访问,还可以在类外的程序中通过对象来访问.
私有成员只能通过该类的成员函数或友元函数访问,在类外的程序中不能通过对象来访问,对私有成员来说,来自类外的任何访问都是非法的.通常将类中的数据成员全部或大部分定义为私有的,这是类封装体最隐蔽的部分,实现了类内部数据的有效保护,提高了类封装数据的安全性.在类外,可以通过对象调用共有成员函数,实现对私有成员的访问.
3.构造函数和析构函数的作用是什么?
构造函数是类中一个特殊的成员函数,他的作用是为对象的数据成员分配存储空间,对数据成员赋初值.
析构函数的作用与构造函数正好相反,它用来完成对象被删除前的一些内存释放工作.
4.构造函数是否可以重载?
为什么?
析构函数呢?
构造函数可以重载,因为一个类可以定义无参数或者参数个数不同的多个构造函数.
析构函数不可以重载,因为析构函数没有参数,不可以像构造函数一样重载.
5.拷贝构造函数的作用是什么?
何时调用拷贝构造函数?
拷贝构造函数的作用是用一个已存在的对象去初始化创建一个同类的新对象.
拷贝构造函数一般在三种情况下调用:
1.用已存在的对象去初始化创建同类的一个新对象.
2.对象作为函数的参数
3.函数的返回值为一个对象
6.分析下面的程序,写出运行结果。
程序(1):
#include<
>
classexap
{intx,y;
public:
exap(inta,intb)
{
x=a;
y=b;
}
exap(exap&
P)
{
x=;
y=;
intset(intx1,inty1)
x=x1;
y=y1;
intgeta()
{returna;
}
intgetb()
{returnb;
};
voidmain()
exapA(1,2);
exapB=A;
cout<
<
"
A="
()<
"
endl;
B="
(10,20);
运行结果:
A=1,2
B=1,2
B=10,20
Pressanykeytocontinue
程序
(2):
classexample1
example1()
cout<
constructingexample1."
~example1()
{
destructingexample1."
classexample2
example2()
constructingexample2."
~example2()
destructingexample2."
example1stu1;
example2tea1;
endinmain"
constructingexample1.
constructingexample2.
endinmain
destructingexample2.
destructingexample1.
7.设类A的定义如下:
classA
inta;
……
若用类A定义了两个对象x1,x2,它们各自的数据成员a是同一个变量吗?
取值是否
可以不同?
答:
是同一个变量,因为创建对象通过构造函数构造的数据成员都是同一个变量
可以取值不同,调用构造函数时若传递的实参不同或者无参数时,即可以使构造的数据成员取值不同.
8.下面是一个产品类Product的定义。
完成成员函数的定义,并用数据测试这个类。
classProduct
char*name;
#include<
classCuboid
intlength;
intwidth;
intheight;
Cuboid(intl=0,intw=0,inth=0)
length=l;
width=w;
height=h;
~Cuboid()
cout<
析构函数已调用"
voidareavolume(intlength,intwidth,intheight);
voidCuboid:
:
areavolume(intlength,intwidth,intheight)
intarea,volume;
area=(length*width+width*height+length*height)*2;
volume=length*width*height;
表面积为"
area<
体积为"
volume<
intl,w,h;
请输入长方体的长,宽,高:
cin>
l>
w>
h;
CuboidC1(l,w,h);
(l,w,h);
voidareavolume();
areavolume()
(length*width+width*height+length*height)*2<
length*width*height<
();
2.
classpoint
intx;
inty;
point(intxp=0,intyp=0)
x=xp;
y=yp;
intgetx()
returnx;
intgety()
returny;
intx,y;
请输入x和y的值:
x>
y;
pointp1(x,y);
x的值为"
y的值为"
4.#include<
#defineN20
classStudent
longID;
charname[N];
intscore1;
intscore2;
Student(longID1,char*n,ints1,ints2);
~Student()
voiddisplay();
voidaverage();
Student:
Student(longID1,char*n,ints1,ints2)
ID=ID1;
strcpy(name,n);
score1=s1;
score2=s2;
voidStudent:
display()
学生信息:
姓名:
name<
学号:
ID<
成绩1:
score1<
成绩2:
score2<
average()
该学生两门课的平均成绩为:
(score1+score2)/2<
请输入学生姓名,学号,第一科目成绩,第二科目成绩:
name>
ID>
score1>
score2;
StudentS1(ID,name,score1,score2);
5.
Student(longID1,char*n,ints1,ints2)
ID=ID1;
strcpy(name,n);
score1=s1;
score2=s2;
Student(Student&
obj)
ID=;
strcpy(name,;
score1=;
score2=;
StudentS2(S1);