第六章6.1请简述类和对象的关系。答:类是一种抽象数据类型,是定义对象的蓝本,它描述这一类对象所共有的属性。对象是这种数据类型的一个具体实例。类是抽象的,而对象是具体的。用一个形象的比喻:类就像工厂中生产产品的模子,而对象则像用这个模子生产出的具体产品。6.2简述类的公有类型成员和私有类型成员的区别。答:类的共有成员是类为外界提供的接口,外界可以通过它们来访问类。具体地说,可以从这个类的外部使用对象名加点操作符来访问这个类中的共有成员,如果是静态的共有成员,还可以使用类名加域解析操作符去访问它们。而类的私有成员则不能用上述的形式从类外直接访问,它们只能被同一类的成员函数访问。6.3以下的叙述中,那条是不正确的。A、在类的成员函数中,可以访问类的public型成员。B、在类的成员函数中,可以访问类的private型成员。C、在类的成员函数中,可以访问类的protected型成员。D、在类的成员函数中,不可以访问类的private型成员。答:D是不正确的。6.4以下的叙述中,那条是正确的。A、使用对象名和点操作符只能访问类的public成员。B、使用对象名和点操作符能访问类的public和protected成员,不能访问private成员。C、使用对象名和点操作符能访问类的public和private成员,不能访问protected成员。D、使用对象名和点操作符能访问类的任意类型的成员。答:A是正确的。6.5请创建一个表示雇员信息的employee类,其中的数据成员包括:char数组型的私有成员name,用来存放雇员的姓名;int型的私有成员empNo,表示雇员的编号;float型的私有成员salary,存放雇员的月薪。函数成员包括:给上述每个私有数据成员赋值的公有成员函数,和读取这些私有数据成员的公有成员函数以及显示雇员信息的公有成员函数display。解:employee类及测试该类的完整程序代码如下:#includeiostreamusingnamespacestd;classemployee{private:charname[20];intempNo;floatsalary;public:voidsetname(char*cp);voidsetempNo(intno);voidsetsalary(floatsa);char*getname();intgetempNo();floatgetsalary();voiddisplay();};voidemployee::setname(char*cp){inti=0;while(*cp){name[i]=*cp;i++;cp++;}name[i]='\0';}voidemployee::setempNo(intno){empNo=no;}voidemployee::setsalary(floatsa){salary=sa;}char*employee::getname(){returnname;}intemployee::getempNo(){returnempNo;}floatemployee::getsalary(){returnsalary;}voidemployee::display(){cout工号为empNo的雇员name的月薪为salaryendl;}voidmain(){employeeem1;charname[20];intemno;floatsa;cout请输入雇员的姓名:;cinname;cout请输入雇员工号:;cinemno;cout请输入雇员薪水:;cinsa;em1.setname(name);em1.setempNo(emno);em1.setsalary(sa);cout工号为em1.getempNo()的雇员em1.getname()的薪水为em1.getsalary()endl;}6.6创建一个表示汽车的类automobile,其中的数据成员包括:char数组型的私有成员brand,表示汽车的品牌;float型私有成员load,表示汽车的载重量;float型私有成员speed,表示汽车的行驶速度。类的函数成员包括:给每个私有的数据成员赋值的公有成员函数;读取每个私有数据成员的公有成员函数;表示启动汽车的公有成员函数startup;表示汽车行驶的公有成员函数run和表示汽车停止的公有成员函数stop。在这些成员函数中输出汽车的当前状态,例如表示汽车行驶的成员函数输出一行字符串“Theautomobileisrunning!”。解:程序代码如下:#includeiostreamusingnamespacestd;classautomobile{private:charbrand[20];floatload;floatspeed;public:voidsetbrand(char*bp);voidsetload(floatlo);voidsetspeed(floatsp);char*getbrand();floatgetload();floatgetspeed();voidstardup();voidrun();voidstop();};voidautomobile::setbrand(char*bp){inti=0;while(*bp){brand[i]=*bp;i++;bp++;}brand[i]='\0';}voidautomobile::setload(floatlo){load=lo;}voidautomobile::setspeed(floatsp){speed=sp;}char*automobile::getbrand(){returnbrand;}floatautomobile::getload(){returnload;}floatautomobile::getspeed(){returnspeed;}voidautomobile::stardup(){cout汽车启动!endl;}voidautomobile::run(){cout汽车正在以speed迈的速度行驶!endl;}voidautomobile::stop(){cout汽车停止行驶!endl;}voidmain(){charbrand[20];floatload,speed;cout请输入汽车的品牌:;cinbrand;cout请输入汽车的最大载重量:;cinload;cout请输入汽车的平均行驶速度:;cinspeed;automobileone;one.setbrand(brand);one.setload(load);one.setspeed(speed);cout这辆汽车的品牌是:one.getbrand()endl;one.stardup();one.run();one.stop();}6.7将习题6.5和6.6中类的成员函数都声明为内联函数。解:程序代码如下:#includeiostreamusingnamespacestd;//以下是employee类classemployee{private:charname[20];intempNo;floatsalary;public:voidsetname(char*cp);voidsetempNo(intno){empNo=no;}voidsetsalary(floatsa){salary=sa;}char*getname(){returnname;}intgetempNo(){returnempNo;}floatgetsalary(){returnsalary;}voiddisplay();};inlinevoidemployee::setname(char*cp){inti=0;while(*cp){name[i]=*cp;i++;cp++;}name[i]='\0';}inlinevoidemployee::display(){cout工号为empNo的雇员name的月薪为salaryendl;}//以上是employee类的声明和实现//以下是automobile类classautomobile{private:charbrand[20];floatload;floatspeed;public:voidsetbrand(char*bp);voidsetload(floatlo){load=lo;}voidsetspeed(floatsp){speed=sp;}char*getbrand(){returnbrand;}floatgetload(){returnload;}floatgetspeed(){returnspeed;}voidstardup();voidrun();voidstop();};inlinevoidautomobile::setbrand(char*bp){inti=0;while(*bp){brand[i]=*bp;i++;bp++;}brand[i]='\0';}inlinevoidautomobile::stardup(){cout汽车启动!endl;}inlinevoidautomobile::run(){cout汽车正在以speed迈的速度行驶!endl;}inlinevoidautomobile::stop(){cout汽车停止行驶!endl;}//以上是automobile类的声明和实现6.8简述类的构造函数的作用。答:在程序中创建一个类的对象时,这个类的构造函数将被自动调用。它的作用是初始化正在创建的对象的数据成员。6.9给习题6.5和6.6中创建的employee类和automobile类添加构造函数,包括默认的构造函数和带参数的构造函数。解:程序代码如下:#includeiostreamusingnamespacestd;classemployee{private:charname[20];intempNo;floatsalary;public:employee(){}employee(char*cp,intno,floatsa);voidsetname(char*cp);voidsetempNo(intno);voidsetsalary(floatsa);char*getname();intgetempNo();floatgetsalary();voiddisplay();};employee::employee(char*cp,intno,floatsa){inti=0;while(*cp){name[i]=*cp;i++;cp++;}name[i]='\0';empNo=no;salary=sa;}voidemployee::setname(char*cp){inti=0;while(*cp){name[i]=*cp;i++;cp++;}name[i]='\0';}voidemployee::setempNo(intno){empNo=no;}voidemployee::setsalary(floatsa){salary=sa;}char*employee::getname(){returnname;}intemployee::getempNo(){returnempNo;}floatemployee::getsalary(){returnsalary;}voidemployee::display(){cout工号为empNo的雇员name的月薪为salaryendl;}//以上是employee类的声明和实现//以下是automobile类的声明和实现classautomobile{private:charbrand[20];floatload;floatspeed;public:automo