最新《C++程序设计案例教程》习题答案第7章类和对象.docx
《最新《C++程序设计案例教程》习题答案第7章类和对象.docx》由会员分享,可在线阅读,更多相关《最新《C++程序设计案例教程》习题答案第7章类和对象.docx(9页珍藏版)》请在冰豆网上搜索。
最新《C++程序设计案例教程》习题答案第7章类和对象
第7章类和对象
一、选择题
1.A2.B3.C4.A5.A6.B7.C8.D9.A10.B11.D12.B
二、程序题
1.
2.
3.
4.
三、简答题
1.构造函数和析构函数的作用是什么?
什么时候需要自己定义构造函数和析构函数?
答:
构造函数是对象建立时,由系统调用的特殊的成员函数。
它的作用是实现数据成员的初始化。
析构函数也是一个特殊的成员函数,它的作用正好与构造函数相反,旨在释放对象所占空间的资源。
类中可以定义多个构造函数,实现构造函数重载,以适应不同对象对数据成员初始化的不同要求。
构造函数可以不带参数,作为默认构造函数,也可以根据数据成员初始化情况,建立带参构造函数。
类定义中析构函数只有一个,且不带参数。
当对象所在的函数或程序结束时,系统自动调用析构函数,释放对象所占空间。
2.静态成员函数的主要作用是什么?
答:
在类中定义函数时,如果函数定义行前有关键字static,那么这个函数就是静态成员函数。
静态成员函数主要用于处理静态数据成员。
3.定义指向对象成员函数的指针变量的方法和定义指向普通函数的指针变量方法的不同处?
答:
与普通指向函数的指针变量不同,定义指向对象成员函数的指针变量时,指针变量名前需加上类名;初始化指针变量名时,成员函数名前面需加上类名,即
函数类型(类名:
:
*指针变量名)(参数表);//定义指针变量
指针变量名=&类名:
:
成员函数名;//初始化指针变量
(对象名.*指针变量名)();//调用指针变量所指的对象成员函数
4.分析友元函数的利弊。
答:
如果在类之外定义的一个函数,这个函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数,在类体中用friend对其进行声明,此函数就称为本类的友元函数。
友元函数可以访问这个类中的私有成员,虽然方便,但它的存在也对数据成员的安全性产生潜在的威胁。
四、编程题
1.定义一个类Point。
要求如下所述:
(1)构造函数初始化类Point类的对象;
(2)定义函数Distance,计算平面上两点之间的距离。
#include
#include
usingnamespacestd;
classPoint
{
private:
doublex1,y1,x2,y2;
public:
Point():
x1(0),y1(0),x2(0),y2(0)
{}
Point(inta1,intb1,inta2,intb2):
x1(a1),y1(b1),x2(a2),y2(b2)
{}
doubleDistance()
{
doublet1,t2;
t1=pow(x2-x1,2);
t2=pow(y2-y1,2);
returnsqrt(t1+t2);
}
};
voidmain()
{
Pointp(1,2,4,2);
cout<<"Thedistanceis"<
}
2.建立一个对象数组,内放5个人的数据(ID号、姓名),设立一个函数find,用指向对象的指针做函数参数,在find函数中按给定的ID号输出其姓名。
#include
#include
usingnamespacestd;
classPerson
{
public:
intid;
charname[10];
public:
Person(inti,charn[10]):
id(i)
{
strcpy(name,n);
}
boolfind(intid_find)
{
if(id_find==id)
{
cout<<"id:
"<"<returntrue;
}
else
returnfalse;
}
};
intmain()
{
intid_find;
Person
p[5]={Person(1,"zhao"),Person(2,"qian"),Person(3,"sun"),Person(4,"li"),Person(5,"zhou")};
Person*p_find;
cout<<"pleaseinputtheid:
"<cin>>id_find;
for(inti=0;i<5;i++)
{
p_find=&p[i];
if(p_find->find(id_find))
break;
}
return0;
}
3.有一信息管理系统,要求检查每个登录系统的用户(User)的用户名和口令,系统检查合格以后方可登录系统。
用C++程序予以描述。
#include
#include
usingnamespacestd;
classPerson
{
private:
charuserName[10];
charpassword[6];
public:
Person(charu[10],charp[6])
{
strcpy(userName,u);
strcpy(password,p);
}
boolfind(charname[10],charpass[6])
{
if(strcmp(userName,name)!
=0)
{
cout<<"notexist"<returnfalse;
}
elseif(strcmp(password,pass)!
=0)
{
cout<<"invalidpassword"<returnfalse;
}
else
{
cout<<"valid"<returntrue;
}
}
};
intmain()
{
Persons[5]={Person("zhao","zhao"),Person("qian","qian"),Person("sun","sun"),Person("li","li"),Person("zhou","zhou")};
charname[10],pass[6];
cout<<"pleaseinputusername:
"<cin>>name;
cout<<"pleaseinputpassword:
"<cin>>pass;
for(inti=0;i<5;i++)
{
if(s[i].find(name,pass))
break;
}
}
4.定义一个类Student记录学生计算机课程的成绩。
要求使用静态成员变量或静态成员函数计算全班计算机课程的总成绩和平均成绩。
#include
#include
usingnamespacestd;
classStudent
{
public:
intid;
charname[10];
intscore;
staticinttotalScore;
Student(inti,charn[10],ints):
id(i),score(s)
{
strcpy(name,n);
}
staticvoiddisplay()
{
cout<<"totalScore:
"<cout<<"aveScore:
"<}
staticvoidcompute(Students)
{
totalScore+=s.score;
}
};
intStudent:
:
totalScore=0;
intmain()
{
Students[5]={Student(1,"zhao",90),Student(2,"qian",82),Student(3,"sun",75),Student(4,"li",89),Student(5,"zhou",62)};
for(inti=0;i<5;i++)
{
s[i].compute(s[i]);
}
Student:
:
display();
return0;
}