第11章谭浩强C++习题及解答_第1页
第11章谭浩强C++习题及解答_第2页
第11章谭浩强C++习题及解答_第3页
第11章谭浩强C++习题及解答_第4页
第11章谭浩强C++习题及解答_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、习习 题题1. 将例将例11.1的程序片段补充和改写成一的程序片段补充和改写成一个完整、正确的程序,用个完整、正确的程序,用公有继承公有继承方式。方式。在程序中应包括输入数据的函数,在程在程序中应包括输入数据的函数,在程序运行时输入序运行时输入num, name, sex, age, addr的值,程序应输出以上的值,程序应输出以上5个数据的值。个数据的值。#include #include using namespace std;class Studentpublic: void get_value( ) coutnumnamesex; void display( ) coutnum: nu

2、mendl; coutname: nameendl; coutsex: sexendl; private : int num; string name; char sex; class Student1: public Student public: void get_value1( ) get_value(); coutageaddr; void display_1( ) display( ); coutage: ageendl; coutaddress: addrendl; private: int age; string addr; ;int main( ) Student1 stud;

3、 stud . get_value1( ); stud . display_1( ); return 0; 2. 将例将例11.2的程序片段补充和改写成一个完的程序片段补充和改写成一个完整、正确的程序,用整、正确的程序,用私有继承私有继承方式。在程序中方式。在程序中应包括输入数据的函数,在程序运行时输入应包括输入数据的函数,在程序运行时输入num, name, sex, age,addr的值,程序应输出以的值,程序应输出以上上5个数据的值。个数据的值。#include #include using namespace std;class Studentpublic: void get_valu

4、e( ) coutnumnamesex; void display( ) coutnum: numendl; coutname: nameendl; coutsex: sexendl; private : int num; string name; char sex; class Student1: private Student public: void get_value1( ) get_value(); coutageaddr; void display_1( ) display( ); coutage: ageendl; coutaddress: addrendl; private:

5、int age; string addr; ;int main() Student1 stud; stud.get_value1(); stud.display_1(); return 0; 3. 将例将例11.3的程序修改、补充,写成的程序修改、补充,写成一个完整、正确的程序,用一个完整、正确的程序,用保护继承保护继承方方式。在程序中应包括输入数据的函数。式。在程序中应包括输入数据的函数。#include #include using namespace std;class Studentpublic: void get_value( ) coutnumnamesex; void displ

6、ay( ) coutnum: numendl; coutname: nameendl; coutsex: sexendl; protected : int num; string name; char sex; class Student1: protected Student public: void get_value1( ) coutplease input num, name,sex, age, addr: numnamesexageaddr; void display_1( ) display( ); coutage: ageendl; coutaddress: addrendl;

7、private: int age; string addr; ;int main() Student1 stud; stud.get_value1(); stud.display_1(); return 0; 4. 修改例修改例11.3的程序,改为用的程序,改为用公用继承公用继承方式。上机调试程序,使之能正确运行方式。上机调试程序,使之能正确运行并得到正确的结果。对这两种继承方式并得到正确的结果。对这两种继承方式作比较分析,考虑在什么情况下二者不作比较分析,考虑在什么情况下二者不能互相代替。能互相代替。/有问题的程序有问题的程序class Studentpublic: void get_val

8、ue( ) coutnumnamesex; void display( ) coutnum: numendl; coutname: nameendl; coutsex: sexendl; protected : int num; string name; char sex; class Student1: protected Student public: void get_value1( ) coutageaddr; void display_1( ) coutage: ageendl; coutaddress: addrendl; private: int age; string addr

9、; ;int main() Student1 stud; stud.get_value(); /错误错误 stud.get_value1(); stud.display(); /错误错误 stud.display_1(); return 0; #include #include using namespace std;class Studentpublic: void get_value( ) coutnumnamesex; void display( ) coutnum: numendl; coutname: nameendl; coutsex: sexendl; protected : i

10、nt num; string name; char sex; class Student1: public Student public: void get_value1( ) coutplease input num, name,sex, age, addr: numnamesexageaddr; void display_1( ) display( ); coutage: ageendl; coutaddress: addrendl; private: int age; string addr; ;int main() Student1 stud; stud.get_value1(); s

11、tud.display_1(); return 0; 5. 有以下程序结构,请分析访问属性。有以下程序结构,请分析访问属性。class A /A为基类为基类 public: void f1( ); int i; protected: void f2( ); int j; private: int k;class B: public A /B为为A的公用派生类的公用派生类public: void f3( ); protected: int m; private: int n;class C: public B /C为为B的公用派生类的公用派生类public: void f4( ); privat

12、e: int p;int main( ) A a1; /a1是基类是基类A的对象的对象B b1; /b1是派生类是派生类B的对象的对象 C c1; /c1是派生类是派生类C的对象的对象return 0;问问: (1) 在在main函数中能否用函数中能否用b1.i, b1.j 和和 b1.k引用引用派生类派生类B对象对象b1中基类中基类A的成员?的成员?(2) 派生类派生类B中的成员函数能否调用基类中的成员函数能否调用基类A中的中的成员函数成员函数f1和和f2?(3) 派生类派生类B中的成员函数能否引用基类中的成员函数能否引用基类A中的中的数据成员数据成员i, j, k ?(4) 能否在能否在m

13、ain函数中用函数中用c1.i, c1.j, c1.k,c1.m, c1.n, c1.p 引用基类引用基类A的成员的成员i, j, k,派生,派生类类B的成员的成员m, n,以及派生类,以及派生类C的成员的成员p?(5) 能否在能否在main函数中用函数中用c1.f1(), c1.f2(),c1.f3() 和和 c1.f4() 调用调用 f1, f2, f3, f4 成员函数?成员函数?(6) 派生类派生类C的成员函数的成员函数 f4 能否调用基类能否调用基类 A 中中的成员函数的成员函数f1, f2和派生类中的成员函数和派生类中的成员函数 f3 ?6. 有以下程序结构,请分析所有成员在各类的

14、有以下程序结构,请分析所有成员在各类的范围内的访问权限。范围内的访问权限。class A public:void f1( ); protected:void f2( ); private:int i;class B: public Apublic:void f3( );int k; private:int m;class C: protected Bpublic:void f4( ); protected:int m;private:int n;class D: private Cpublic:void f5( ); protected:int p; private:int q;int mai

15、n() A a1; B b1; C c1; D d1;7. 有以下程序,请完成下面工作有以下程序,请完成下面工作: 阅读程序,写出运行时输出的结果。阅读程序,写出运行时输出的结果。 然后上机运行,验证结果是否正确。然后上机运行,验证结果是否正确。 分析程序执行过程,尤其是调用构造函数分析程序执行过程,尤其是调用构造函数的过程。的过程。#include using namespace std;class Apublic: /A( )a=0;b=0; /A(int i)a=i;b=0; A(int i=0, int j=0) a=i; b=j; void display( ) couta=a b=

16、b; private: int a, b; ;class B : public Apublic: /B( )c=0; /B(int i):A(i)c=0; /B(int i,int j):A(i,j)c=0; B(int i=0, int j=0, int k=0):A(i, j) c = k; void display1( ) display(); cout c=cendl; private:int c;int main( ) B b1; B b2(1); B b3(1,3); B b4(1,3,5); b1.display1( ); b2.display1( ); b3.display1(

17、 ); b4.display1( ); return 0;运行结果如下运行结果如下:a=0 b=0 c=0a=1 b=0 c=0a=1 b=3 c=0a=1 b=3 c=58. 有以下程序,请完成下面工作有以下程序,请完成下面工作: 阅读程序,写出运行时输出的结果。阅读程序,写出运行时输出的结果。 然后上机运行,验证结果是否正确。然后上机运行,验证结果是否正确。 分析程序执行过程,尤其是调用构造函数分析程序执行过程,尤其是调用构造函数和析构函数的过程。和析构函数的过程。#include using namespace std;class Apublic: A( )coutconstructin

18、g A endl; A( )coutdestructing A endl;class B : public Apublic: B( )coutconstructing B endl; B( )coutdestructing B endl;class C : public Bpublic: C( )coutconstructing C endl; C( )coutdestructing C endl;int main( )C c1;return 0;运行结果如下运行结果如下:constructing Aconstructing Bconstructing Cdestructing Cdestru

19、cting Bdestructing A9. 分别定义分别定义Teacher(教师教师)类和类和Cadre(干部干部)类,类,采用多重继承方式由这两个类派生出新类采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部教师兼干部)。要求。要求: 在两个基类中都包含姓名、年龄、性别、在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。地址、电话等数据成员。 在在Teacher类中还包含数据成员类中还包含数据成员title(职称职称),在在Cadre类中还包含数据成员类中还包含数据成员post(职务职务), 在在Teacher_Cadre类中还包含数据成员类中还包含数据成员

20、wage(工工资资)。 对两个基类中的姓名、年龄、性别、地址、对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。数据成员时,指定作用域。 在类体中声明成员函数,在类外定义成员在类体中声明成员函数,在类外定义成员函数。函数。 在派生类在派生类Teacher_Cadre的成员函数的成员函数show中调用中调用Teacher类中的类中的display函数,输出姓名、函数,输出姓名、年龄、性别、职称、地址、电话,然后再用年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。语句输出职务与工资。#incl

21、ude #includeusing namespace std;class Teacher public: Teacher(string nam, int a, char s, string tit, string ad, string t); void display( ) ; protected: string name; int age; char sex; string title, addr, tel;Teacher:Teacher(string nam,int a,char s,string tit,string ad,string t):name(nam),age(a),sex(

22、s),title(tit),addr(ad),tel(t) void Teacher:display() coutname:nameendl; coutageageendl; coutsex:sexendl; couttitle:titleendl; coutaddress:addrendl; couttel:telendl; class Cadre public: Cadre( string nam, int a, char s,string p, string ad, string t ); void display( ) ; protected: string name; int age

23、; char sex; string post, addr, tel; ;Cadre:Cadre(string nam,int a,char s,string p,string ad,string t):name(nam),age(a),sex(s),post(p),addr(ad),tel(t) void Cadre:display() coutname:nameendl; coutage:ageendl; coutsex:sexendl; coutpost:postendl; coutaddress:addrendl; couttel:telendl; class Teacher_Cadr

24、e: public Teacher, public Cadre public: Teacher_Cadre(string nam, int a,char s, string tit, string p,string ad, string t, float w); void show( ); private: float wage; ;Teacher_Cadre:Teacher_Cadre (string nam, int a,char s,string t, string p, string ad,string tel,float w): Teacher(nam,a,s,t,ad,tel),

25、Cadre(nam,a,s,p,ad,tel) wage=w; void Teacher_Cadre:show( ) Teacher: display( ); coutpost:postendl; coutwage:wageendl; int main( ) Teacher_Cadre te_ca(Wang-li, 50,f, prof. , president ,135 Beijing Road , Shanghai ,(021)61234567, 1534.5 ) ; te_ca . show( ); return 0;10. 将本章将本章11.8节中的程序片段加以补充完善,节中的程序片段

26、加以补充完善,成为一个完整的程序。在程序中使用继承和成为一个完整的程序。在程序中使用继承和组合。在定义组合。在定义Professor类对象类对象 prof1 时给出时给出所有数据的初值,然后所有数据的初值,然后修改修改 prof1的生日数的生日数据据,最后输出,最后输出prof1 的全部最新数据。的全部最新数据。class Teacher /教师类教师类 public: Teacher ( int n, string nam, char s ) num=n; name=nam; sex=s; void display( ) /定义输出函数定义输出函数coutnum:numendl; coutname:nameendl; coutsex:sexendl; private: int num; string name; char sex; ;class BirthDate /生日类生日类 public: BirthDate ( int y, int m, int d) year=y; month=m; day=d; void display( ) /输出函数输出函数 coutbirthday: year - month - day endl; void change(int y,int m,i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论