第8章例题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第8章继承性和派生类
例题程序
例8.1分析下列程序,回答提出的问题。
程序内容如下:
#include
class A
{
public:
void f1();
protected:
int j1;
private:
int i1;
};
class B:public A
{
public:
void f2();
protected:
int j2;
private:
int i2;
};
class C:public B
{
public:
void f3();
};
回答下述问题:
①派生类B中成员函数f2()能否访问基类A中的成员f1(),i1,j1?
②派生类B中对象b能否访问基类A中的成员f1(),i1和j1?
③派生类C中成员函数f3()能否访问基类B中的成员f2()和j2?能否访问基类A中
的成员f1(),j1和i1?
④派生类C的对象c能否访问基类B中的成员f2(),j2和i2?能否访问基类A中
的成员f2(),j1和i1?
#include
class A
{
public:
void f1()
{
}
protected:
int j1;
private:
int i1;
};
class B:public A
{
public:
void f2()
{f1();
j1=1;
}
void Print()
{cout< protected: int j2; private: int i2; }; class C:public B { public: void f3() {f2(); j2=1; f1(); j1=1; } void Print() {cout< }; void main() { B b; b.f1(); C c; c.f2(); c.f1(); b.Print(); c.Print(); } 例8.2分析下列程序,并回答所提出的问题。 程序内容如下: #include class A { public: void f(int i) { cout< void g() { cout<<"A\n"; } }; class B:A { public: void h() { cout<<"B\n"; } A::f; }; void main() { B b; b.f(10); b.g(); b.h(); } 回答下列问题: ①执行该程序时,哪些语句会出现编译错?为什么? ②去掉出错语句后,运行该程序后输出结果如何? ③程序中派生类B是以继承方式继承了基类A? ④派生类B中,下列语句含义是什么? A::f; ⑤将派生类B的继承方式改为公有继承后,恢复原来删去的语句,输出结果如何? 例8.3分析下列程序的输出结果,并回答所提出的问题。 程序内容如下: #include #include class A { public: A(const char *str) { strcpy(name,str); } protected: char name[80]; }; class B:protected A { public: B(const char *str):A(str) {} void Print() { cout< }; void main() { B b("Zhang"); b.Print(); } 回答下列问题: ①执行该程序后,输出结果如何? ②将该程序中“class B: protected A”改为“class B: private B”后,输出结果如何? ③将类A中数据成员char name[80]的访问权限改为private后,输出结果如何? 例8.4分析下列程序,并填写不同成员在不同类的访问权限。 程序内容如下: #include class A { public: void f1(); protected: int a1; private: int a2; }; class B:public A { public: void f2(); protected: void f3(); private: int b; }; class C:protected B { public: void f4(); protected: int c1; private: int c2; };