高级程序设计.PPT
《高级程序设计.PPT》由会员分享,可在线阅读,更多相关《高级程序设计.PPT(41页珍藏版)》请在三一文库上搜索。
1、高级程序设计,主 讲:李晓勇 Email: Telphone:13819194055,一、继承总结,继承方式: public : 公有继承 protected : 保护继承 private : 私有继承 访问控制属性: public : 公有类型 protected : 保护类型 private : 私有类型,继承方式与访问控制属性,公有继承: 基类的公有成员和保护成员作为派生类公有成员时,保持不变,但基类的私有成员不可访问。 私有继承: 基类的公有成员和保护成员作为派生类私有成员,变成私有,但基类的私有成员不可访问。 保护继承: 基类的公有成员和保护成员作为派生类保护成员,变成保护,但基类的
2、私有成员不可访问。,不同继承方式的基类/派生类特性,基类/派生类的关系,任何一个类都可以派生出一个新类,派生类也可以派生出新的类,即一个基类是另一个基类的派生类,构成了类的层次结构。,A,B,C,A 是 B 的基类, B 是 C 基类; 称 B 是 A 的直接派生类; A 是 C 的间接基类;,二 、继承与构造函数/析构函数,1、问题: 类都有构造函数/析构函数,基类/派生类也有。 则 (1)派生类和基类的构造函数和析构函数是如何被调用的? (2)基类构造函数是如何获得实际参数的?,2、规则:,(1)派生类并不继承基类的构造/析构函数,相反派生类的构造函数必须向基类的构造函数提供实参。 (2)
3、创建一个派生类的对象时,则先调用基类的构造函数,然后调用派生类的构造函数;派生类的对象被撤销时析构函数的调用次序相反。,3、派生类构造函数的形式,(): (参数),(参数) 例: B:B(int i ,int k):A(i) b=k; cout“Bs create“endl; ,初始化列表,举例:从vehicle(汽车)派生car(小汽车)类。,#include class vehicle/基类vehicle类的声明 private: /私有数据成员 int wheels; protected: /保护数据成员 float weight; public:/公有函数成员 vehicle(int
4、in_wheels, float in_weight) wheels=in_wheels; weight=in_weight; int get_wheels() return wheels; float get_weight() return weight; ;,/派生类car类的声明 class car:public vehicle private: /新增私有数据成员 int passenger_load; public:/新增公有函数成员 car(int in_wheels, float in_weight,int people=5) :vehicle(in_wheels,in_weig
5、ht) passenger_load=people; int get_passengers() return passenger_load; ;,void main() car bluebird(4,1000); /声明car类的对象 cout“The message of bluebird(wheels,weight,passengers):“endl; coutbluebird.get_wheels()“,“ /输出小汽车的信息 bluebird.get_weight()“,“ bluebird.get_passengers()endl; 程序运行结果为: The message of b
6、luebird(wheels,weight,passengers): 4,1000,5,例,继承中的构造/析构函数,class A public: A() a=0; cout“As default create“endl; A(int i) a=i; cout“As create“endl; A() cout“As deleted“endl; void aprint() couta“,“; int geta() return a; private: int a; ;,class B: public A public: B() b=0;cout“Bs default create“endl; B
7、 (int i, int j, int k); B() cout“Bs deleted“endl; void print(); private: int b; A aa; /类成为数据成员 ; B: B(int i, int j, int k): A(i), aa(j) b=k; cout“Bs create“endl; ,void B:print() aprint(); coutb“,“aa.geta()endl; void main( ) B bb2; bb0= B(1,2,5); bb0.print(); ,As default create As default create Bs d
8、efault create As default create As default create Bs default create As create As create Bs create Bs deleted As deleted As deleted 1,5,2 Bs deleted As deleted As deleted Bs deleted As deleted As deleted,结论: 创建一个派生类的对象时,构造函数的执行次序: (1)先调用基类的构造函数 (2)子对象类的构造函数 (3)派生类的构造函数 派生类的对象被撤销时,析构函数的执行次序: 析构函数的调用次序
9、与构造函数相反。,三、同名覆盖原则 但派生类中存在同基类同名的成员时,派生类覆盖基类;可通过基类名加上”:”在派生类中对基类中的成员进行访问,#include class CA protected: int x,y; public: void set(int m, int n) x=m; y=n; ;,class CB: public CA protected: int x,y; public: void set(int m, int n) x=m; y=n; CA:set(m+2, n+3); ; void main() CB b; b.CA:set(3,4); b.set(23,45);
10、,四、多继承,1、概念 多继承(多重继承):为一个派生类指定多个基类。或者说,一个子类从多个基类中派生出来,它继承了多个类的基本特性。,2、派生类的定义,单继承派生类的定义格式: class : ; 多继承派生类的定义格式: class : , ;,说明: (1)派生类与每个类之间的关系仍可看作是一个单继承。 (2)多个基类中的成员相同时,通过子类的对象调用时,无法确定是哪一个基类的成员,容易产生二义性。,例, 床/沙发/折叠沙发,class bed / 多重继承 public : bed( ):weight(0) void sleep( ) cout“Sleeping.n“; void se
11、tweight( int i ) weight=i; protected: int weight; ; class sofa public: sofa( ): weight(0) void watchtv( ) cout“Watching tv.n“; void setweight(int i) weight=i; protected: int weight; ;,class sleepersofa : public bed, public sofa public: sleepersofa( ) void foldout( ) cout“Fold out the sofa.n“; ; void
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 程序设计
链接地址:https://www.31doc.com/p-3165870.html