继承与派生 (2)精选PPT.ppt
《继承与派生 (2)精选PPT.ppt》由会员分享,可在线阅读,更多相关《继承与派生 (2)精选PPT.ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、继承与派生第1页,此课件共60页哦 面向对象程序的面向对象程序的4 4个主要特点:个主要特点:抽象抽象-类是对象的抽象,对象是类的具体化。类是对象的抽象,对象是类的具体化。封装封装-数据与操作封装在一个对象中;数据与操作封装在一个对象中;对象中某些数据对外隐蔽。对象中某些数据对外隐蔽。继承继承-“软件重用软件重用”。多态性多态性-由继承产生不同的类,其对象对同一由继承产生不同的类,其对象对同一 个消息作出的不同反应。个消息作出的不同反应。复习:复习:引入继承机制的作用引入继承机制的作用第2页,此课件共60页哦继承:继承:保持已有类的特性而构造新类的过程,它是类之保持已有类的特性而构造新类的过程
2、,它是类之 间定义的一种重要关系(共性)。间定义的一种重要关系(共性)。派生:派生:是在已有类的基础上新增自己的特性而产生新类是在已有类的基础上新增自己的特性而产生新类 的过程(个性)。的过程(个性)。基类(或父类)基类(或父类):被继承的已存在的类。被继承的已存在的类。派生类(或子类):派生类(或子类):派生出的新类。派生出的新类。5.1 5.1 继承与派生的概念继承与派生的概念 第3页,此课件共60页哦 继承与派生的例子:继承与派生的例子:不具有对称性不具有对称性 不是所有植物都属于蕨类不是所有植物都属于蕨类传递性传递性 高等植物、蕨类植物、芒萁都是植物,具有植物的共同特征高等植物、蕨类植
3、物、芒萁都是植物,具有植物的共同特征 植物植物 低等植物低等植物高等植物高等植物藻类藻类菌类菌类地衣类地衣类苔藓类苔藓类蕨类蕨类裸子类裸子类被子类被子类地地钱钱小小金金发发草草毛毛蕨蕨芒芒萁萁杉杉木木柏柏木木荔荔枝枝橘橘子子第4页,此课件共60页哦AB1B2C1C2C3B1,B2 的基类的基类A 的派生类的派生类C1,C2,C3 的基类的基类A 的派生类(的派生类(单继承单继承)C3的基类的基类B1,B2 的派生类(的派生类(多继承多继承)B1 的派生类的派生类5.1 5.1 继承与派生的概念继承与派生的概念 单继承:单继承:一个派生类只从一个基类派生。一个派生类只从一个基类派生。多继承:多继
4、承:一个派生类可以从两个或多个基类派生。一个派生类可以从两个或多个基类派生。基类与派生类的关系:基类与派生类的关系:派生类是基类的具体化,而基类则是派生类的抽象。派生类是基类的具体化,而基类则是派生类的抽象。第5页,此课件共60页哦5.2 5.2 派生类的声明方式派生类的声明方式 声明基类的格式:声明基类的格式:class class 派生类名派生类名 声明派生类的格式:声明派生类的格式:class class 派生类名派生类名 :继承方式继承方式 基类名基类名 新增加新增加的的数据成员和成员函数声明数据成员和成员函数声明 ;protected publicprivate第6页,此课件共60页
5、哦 基类继承过来的成员(基类继承过来的成员(共性共性)派生类中的成员派生类中的成员 自己增加的成员(自己增加的成员(个性个性)5.3 5.3 派生类的构成派生类的构成 新增加的新增加的成员成员派生类将基类除构造函派生类将基类除构造函数和析构函数外的所有数和析构函数外的所有成员接收过来。成员接收过来。第7页,此课件共60页哦派生类中包含了基类成员和派生类成员,就产生了这两部分成派生类中包含了基类成员和派生类成员,就产生了这两部分成员的关系和访问属性的问题。员的关系和访问属性的问题。5.4.1 5.4.1 派生类成员的访问属性派生类成员的访问属性派生类的继承方式派生类的继承方式 基类成员的访问属性
6、基类成员的访问属性决定派生类访决定派生类访问属性因素问属性因素第8页,此课件共60页哦成员的访问属性(复习)成员的访问属性(复习)私有成员私有成员(private)(private):可以被类自身的成员和友元访问,但不能:可以被类自身的成员和友元访问,但不能被其他任何类和任何普通函数访问。被其他任何类和任何普通函数访问。公有成员公有成员(public)(public):可以被任何普通函数和任何类的成员函数:可以被任何普通函数和任何类的成员函数访问。访问。保护成员保护成员(protected)(protected):可以被类自身的成员和友元访问外。:可以被类自身的成员和友元访问外。三种继承方式:
7、三种继承方式:-公有继承公有继承 -私有继承私有继承 -保护继承保护继承第9页,此课件共60页哦5.2.1 访问控制1.1.公有继承公有继承public 成员成员 public 成员成员protected 成员成员 protected 成员成员private 成员成员public 成员成员protected 成员成员private 成员成员基类基类派生类派生类不可直接访问不可直接访问基类的基类的publicpublic和和protectedprotected成员的访问属性在派生类中保持成员的访问属性在派生类中保持不变,但基类的不变,但基类的privateprivate成员不可直接访问。成员不可
8、直接访问。第10页,此课件共60页哦公用继承示例公用继承示例:错误,错误,numnum在基类中为私有成员,在派生在基类中为私有成员,在派生类中不可直接访问。类中不可直接访问。第11页,此课件共60页哦公用继承示例公用继承示例:display();第12页,此课件共60页哦#includeclass A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;class B:public A public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员
9、使用基类数据成员x,y protected:int s;void main()A objA;B objB;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;公有继承的测试公有继承的测试 1 5.2.1 访问控制第13页,此课件共60页哦#includeclass A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected
10、:int x,y;class B:public A public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员使用基类数据成员x,y protected:int s;void main()A objA;B objB;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;公有继承的测试公有继承的测试 1 5.2.1 访问控制class Aclass B:
11、public A第14页,此课件共60页哦#includeclass A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;protected:int x,y;class B:public A public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员使用基类数据成员x,y protected:int s;protected:int s;void main()A objA;B objB;cout It is object_A:n;objA.g
12、et_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;公有继承的测试公有继承的测试 1 5.2.1 访问控制class Aclass B:public A保护数据成员保护数据成员在类层次中可见在类层次中可见第15页,此课件共60页哦#includeclass A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;class B:public A public
13、:int get_S()return s;void make_S()s=x*y;/使用基类数据成员使用基类数据成员x,y protected:int s;void main()A objA;B objB;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;公有继承的测试公有继承的测试 1 5.2.1 访问控制objA.yobjA.xobjAx y 第16页,此课件共60页哦#includeclass
14、A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;class B:public A public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员使用基类数据成员x,y protected:int s;void main()A objA;B objB;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S
15、();cout S=objB.get_S()endl;公有继承的测试公有继承的测试 1 5.2.1 访问控制objB.sobjB.yobjB.xobjBsobjA.yobjA.xobjAx y 第17页,此课件共60页哦#includeclass A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;class B:public A public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员使用基类数据成员x,y protected:int
16、s;void main()A objA;B objB;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;公有继承的测试公有继承的测试 1 5.2.1 访问控制对对 objA 的的数据成员操作数据成员操作objB.sobjB.yobjB.xobjBsobjA.yobjA.xobjAx y 第18页,此课件共60页哦#includeclass A public:void get_XY()cout x y
17、;void put_XY()cout x=x ,y=y n;protected:int x,y;class B:public A public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员使用基类数据成员x,y protected:int s;void main()A objA;B objB;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;公有继
18、承的测试公有继承的测试 1 5.2.1 访问控制调用基类调用基类A成员函数成员函数对对 objB 的数据成员操作的数据成员操作objB.sobjB.yobjB.xobjBsobjA.yobjA.xobjAx y 第19页,此课件共60页哦#includeclass A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;class B:public A public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员使用基类数据成员x,y prote
19、cted:int s;void main()A objA;B objB;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;公有继承的测试公有继承的测试 1 5.2.1 访问控制objB.sobjB.yobjB.xobjBsobjA.yobjA.xobjAx y 调用基类调用基类A成员函数成员函数对对 objB 的数据成员操作的数据成员操作第20页,此课件共60页哦#includeclass A pu
20、blic:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;class B:public A public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员使用基类数据成员x,y protected:int s;void main()A objA;B objB;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();c
21、out S=objB.get_S()endl;公有继承的测试公有继承的测试 1 5.2.1 访问控制调用派生类调用派生类B成员函数成员函数对对 objB 的数据成员操作的数据成员操作objB.sobjB.yobjB.xobjBsobjA.yobjA.xobjAx y 第21页,此课件共60页哦#includeclass A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;class B:public A public:int get_S()return s;void make_S()s=x*
22、y;/使用基类数据成员使用基类数据成员x,y protected:int s;void main()A objA;B objB;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;公有继承的测试公有继承的测试 1 5.2.1 访问控制objB.sobjB.yobjB.xobjBsobjA.yobjA.xobjAx y 调用派生类调用派生类B成员函数成员函数对对 objB 的数据成员操作的数据成员操作第
23、22页,此课件共60页哦#includeclass A public:A()x=1;int out()return x;void addX()x+;private:int x;class B:public A public:B()y=1;int show()return y;void addY()y+;private:int y;void main()A a;B b;b.addX();b.addY();cout a.x=a.out()endl;cout b.x=b.out()endl;cout b.y=b.show()endl;公有继承的测试公有继承的测试 2 class B:public A
24、class A a.x5.2.1 访问控制第23页,此课件共60页哦#includeclass A public:A()x=1;int out()return x;void addX()x+;private:int x;class B:public A public:B()y=1;int show()return y;void addY()y+;private:int y;void main()A a;B b;b.addX();b.addY();cout a.x=a.out()endl;cout b.x=b.out()endl;cout b.y=b.show()endl;公有继承的测试公有继承
25、的测试 2 class B:public Aclass A b.xa.xb.y5.2.1 访问控制第24页,此课件共60页哦#includeclass A public:A()x=1;int out()return x;void addX()x+;private:int x;class B:public A public:B()y=1;int show()return y;void addY()y+;private:int y;void main()A a;cout a.x=a.out()endl;B b;b.addX();b.addY();cout b.x=b.out()endl;cout
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承与派生 2精选PPT 继承 派生 精选 PPT
限制150内