文档库 最新最全的文档下载
当前位置:文档库 › C++第五章习题

C++第五章习题

C++第五章习题
C++第五章习题

第五章习题

1. 将例5.1的程序片段补充和改写成一个完整、正确的程序,用公用继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。

2. 将例5.2的程序片段补充和改写成一个完整、正确的程序,用私有继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。

3. 将例5.3的程序修改、补充,写成一个完整、正确的程序,用保护继承方式。在程序中应包括输入数据的函数。

4. 修改例

5.3的程序,改为用公用继承方式。上机调试程序,使之能正确运行并得到正确的结果。对这两种继承方式作比较分析,考虑在什么情况下二者不能互相代替。

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( );

private:

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) 能否在main函数中用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. 有以下程序结构,请分析所有成员在各类的范围内的访问权限。class A

{public:

void f1( );

protected:

void f2( );

private:

int i;

};

class B: public A

{public:

void f3( );

private:

int m;

};

class C: protected B

{public:

void f4( );

protected:

int m;

private:

int n;

};

class D: private C

{public:

void f5( );

protected:

int p;

private:

int q;

};

int main()

{A a1;

B b1;

C c1;

D d1;

7. 有以下程序,请完成下面工作:

①阅读程序,写出运行时输出的结果。

②然后上机运行,验证结果是否正确。

③分析程序执行过程,尤其是调用构造函数的过程。#include

using namespace std;

class A

A( ){a=0;b=0;}

A(int i){a=i;b=0;}

A(int i,int j){a=i;b=j;}

void display( ){cout<<″a=″<

int a;

int b;

};

class B : public A

{public:

B( ){c=0;}

B(int i):A(i){c=0;}

B(int i,int j):A(i,j){c=0;}

B(int i,int j,int k):A(i,j){c=k;}

void display1( )

{display();

cout<<″ c=″<

}

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( );

b4.display1( );

return 0;

8. 有以下程序,请完成下面工作:

①阅读程序,写出运行时输出的结果。

②然后上机运行,验证结果是否正确。

③分析程序执行过程,尤其是调用构造函数和析构函数的过程。#include

using namespace std;

class A

{public:

A( ){cout<<″constructing A ″<

~A( ){cout<<″destructing A ″<

};

class B : public A

{public:

B( ){cout<<″constructing B ″<

~B( ){cout<<″destructing B ″<

};

class C : public B

{public:

C( ){cout<<″constructing C ″<

~C( ){cout<<″destructing C ″<

};

int main( )

{C c1;

return 0;

9. 分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求:

①在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。

②在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages(工资)。

③对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。

④在类体中声明成员函数,在类外定义成员函数。

⑤在派生类Teacher_Cadre的成员函数show中调用Teacher类中的

display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。

10. 将本章5.8节中的程序片段加以补充完善,成为一个完整的程序。在程序中使用继承和组合。在定义Professor类对象prof1时给出所有数据的初值,然后修改prof1的生日数据,最后输出prof1的全部最新数据。

相关文档