77范文网 - 专业文章范例文档资料分享平台

第5章 继承与派生(2)

来源:网络收集 时间:2018-11-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

私有 公有 保护 不可访问 可访问(公有) 可访问(保护) 不可访问 可访问(私有) 可访问(私有) 不可访问 可访问(保护) 可访问(保护) 从以下的表中可以看出,在直接派生中,可访问情况结果是一样的,但如果再继续派生,它们就会有所不同了。这个问题在下面的多级派生中讲解。

下面再来看一个实例

//思考题:自编,继承父类成员的简单实例 #include using namespace std; class Point { int X,Y; public: void setPoint(int x,int y){X=x;Y=y;} void move(int xoff,int yoff){X+=xoff;Y+=yoff;} int getX(){return X;} int getY(){return Y;} void displayPoint(){cout<

class Rectangle:public Point { int W,H; public: void setRectangle(int x,int y,int w,int h){setPoint(x,y);W=w;H=h;} int getW(){return W;} int getH(){return H;} //void displayRectangle(){cout<

int main() {

Rectangle rect; rect.setRectangle(2,3,10,20); rect.move(2,3); //cout<

从上例我们可以了解到派生类Rectangle从基类Point公有继承,所以继承了基类中的全部公有成员和私有成员(构造函数与析构函数除外),并可以访问基类中的公有成员setPoint、move、getX 、getY和displayPoint,此外,它还有比父类多一些的信息,即它有W、H数据成员以及setRectangle、getW、getH、displayRectangle成员函数。

下面来看一下书中的实例。 //例5.3 在派生类中引用保护成员

#include #include using namespace std;

class Student //声明基类

{public: //基类公用成员 void display( );

void get_value(){cin>>num>>name>>sex;}

protected : //基类保护成员 int num; string name; char sex; };

void Student::display( )

{cout<<\ cout<<\ cout<<\ }

class Student1: protected Student //用protected继承方式声明一个派生类 {public:

void display1( );

void get_value1(){cin>>age>>addr;} private:

int age; string addr; };

void Student1::display1( )

{cout<<\ //引用基类的保护成员,合法 cout<<\ //引用基类的保护成员,合法 cout<<\ //引用基类的保护成员,合法 cout<<\ //引用派生类的私有成员,合法 cout<<\ //引用派生类的私有成员,合法 }

int main( ) {

Student1 stud1; //stud1是派生类student2的对象 stud1.get_value(); stud1.get_value1();

stud1.display1( ); //display是派生类中的公用成员函数 return 0; }

下面再来看一个实例。 //思考题:自编。 #include #include using namespace std;

//------------------------------------- class Base {

int a;

void f(){cout<

void g(){cout<

void k(){cout<

class Derived:public Base{ //改为private、protected,再看结果 public:

void df(){ //cout<

void func(){ Base b;

//cout<

从上面的实例中可以了解到以下信息: 公有 在基类中对基类成员的访问能力 √ 公有派生类对基类成员的访问能力 √ 在类外对基类成员的访问能力 √ 保护 私有 √ √ √ × × × 那么如果是保护派生呢?情况会怎么样?通过程序的运行,可以知道与上述情况完全一样。如果私有派生呢?情况也一样,那到底有什么区别呢?在多级派生中可以得到答案。 5.4.4 多级派生时的访问属性

下图是一个典型的多级继承结构图,我们用程序来描述。

A

B

C

//例5.4 多级派生的访问属性 class A//基类 {public: int i; protected: void f2( ); int j; private: int k; };

class B: public A //public方式 {public: void f3( ); protected: void f4( ); private: int m; };

class C: protected B //protected方式 {public: void f5( ); private: int n; };

int main() {

return 0; }

我们用一个表格形式来看各成员在不同类中的访问情况:

成员 i 类 基类A 公有派生类B 保护派生类C 公有 √ 公有 √ 保护 √ f2 保护 √ 保护 √ 保护 √ f2 保护 √ 保护 √ 保护 √ f2 保护 √ 私有 √ 不可访问× j k f3 × 公有 √ 保护 √ f3 × 公有 √ 保护 √ f3 × 公有 √ 保护 √ f4 × m × f5 × × 公有 √ f5 × × 公有 √ f5 × × 公有 √ n × × 私有 √ n × × 私有 √ n × × 私有 √ 保护 私有 √ √ 保护 不可访√ 问× 保护 不可访√ 问× j k 保护 私有 √ √ 保护 不可访√ 问× f4 × m × 如果是保护派生,访问情况如下表: 成员 i 类 基类A 公有 √ 保护 私有 √ √ 保护 不可访√ 问× 保护 不可访√ 问× j k 保护 保护 派生类B √ 保护派生类C 保护 √ 保护 私有 √ √ 保护 不可访√ 问× f4 × m × 如果是私有派生,访问情况如下表: 成员 i 类 基类A 公有 √ 保护 私有 √ √ 私有 不可访√ 问× 不可访问× 不可访问× 私有 私有 派生类B √ 保护派生类C 不可访问× 保护 私有 √ √ 保护 不可访√ 问× 通过以上分析可知,无论是哪一种继承方式,在派生类中都不能访问基类中的私有成员,如果在多级派生时采用公用继承方式,直到最后一级派生类都能访问基类的公有成员和保护成员。如果采用私有继承方式,经过若干派生后,基类的所有的成员都不可访问了。如果采用保护继承方式,在派生类外是无法访问派生类中的任何成员的。

在经过多次派生后,人们很难记清楚各成员的访问情况,因此在实际应用中多采用公有继承。

//思考题:阅读下列程序,画出访问情况表。 class A{ int i; public:

void f1(); protected: void f2(); };

class B:public A{ int m; public:

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库第5章 继承与派生(2)在线全文阅读。

第5章 继承与派生(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/293444.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: