面向对象程序设计 第九讲派生与继承性 堂提要 第7章派生与继承性 71派生类 72多重继承 73类模板的派生
第 7章 派生与继承性 7.1 派生类 7.2 多重继承 7.3 类模板的派生 第九讲 派生与继承性
面向对象程序设计 派生类( derived class 为什么引入派生类自然地表示现实世 界,是复杂的系统层次化,提高代码的重用 性,增强语言功能,提高软件开发效益. 堂提要 例如关于雇员和车辆的层次关系 第7章派生与继承性 employee(雇员) 7.1派生类 72多重继承 eacher教师)Oice(行政)Woer(工人)73类模板的派生 Vehicle(车辆) Car(汽车) Sportscar(赛车
第 7章 派生与继承性 7.1 派生类 7.2 多重继承 7.3 类模板的派生 派 生 类 (derived class) 为什么引入派生类 自然地表示现实世 界,是复杂的系统层次化,提高代码的重用 性,增强语言功能,提高软件开发效益. 例如关于雇员和车辆的层次关系: Teacher(教师) Officer(行政) Worker(工人) Employee(雇员) Car(汽车) Sportscar(赛车) Vehicle(车辆)
面向对象程序设计 派生类定义方式 C⊥ass b ase public: 堂提要 protected 第7章派生与继承性 private }; 7.1派生类 72多重继承 blic 73类模板的派生 class derivedName: protected base.. private public、 protected和 private分别表示公有继 承、保护继承和私有继承
第 7章 派生与继承性 7.1 派生类 7.2 多重继承 7.3 类模板的派生 派生类定义方式 class base { public: …… protected: …… private: …… }; public class derivedName: protected base{..} private public、protected 和 private分别表示公有继 承、保护继承和私有继承
面向对象程序设计 例1基类车辆 vehicle. h(因篇幅所限,我们 将类的实现放到头文件之中) #include class vehicle public 堂提要 vehicle(int aw, int ats, float ap) weight(aw), topspeed( ats), price(ap)ii 第7章派生与继承性 void printed cout n weight: < weight <<"pd 7.1派生类 cout<<" in top speed"<< topspeed <s"mph":7,2多重继承 cout n price: $"< price 73类模板的派生 private int weight;∥重量 int topspeed,l高速度 float price;∥价格
第 7章 派生与继承性 7.1 派生类 7.2 多重继承 7.3 类模板的派生 例1 基类车辆vehicle.h (因篇幅所限,我们 将类的实现放到头文件之中) #include class vehicle { public: private: }; vehicle(int aw, int ats, float ap) :weight(aw),topspeed(ats),price(ap) { } void print( ) { cout << "\n weight:" << weight << "pds"; cout << "\n top speed:" << topspeed << "mph"; cout << "\n price: $ "<< price; int weight; //重量 int topspeed; //最高速度 float price; //价格
面向对象程序设计 ∥公有派生类汽车carh #include "vehicle.h" class car: public vehicle i public car(int aw, int ats, float ap, int anc, int ahp) 堂提要 vehicle(aw, ats, ap), numbercylinders(anc) horsepower(ahp)ii 第7章派生与继承性 void printed vehicle: print();∥调用基类的函数 7.1派生类 cout<<" n cylinders:"<< numbercylinders:7.2多重继承 cout << n horsepower: < horsepower 73类模板的派生 private int numbercylinder;∥汽缸数 int horsepower; ∥力
第 7章 派生与继承性 7.1 派生类 7.2 多重继承 7.3 类模板的派生 //公有派生类汽车 car.h #include " vehicle.h" class car : public vehicle { public: private: }; car(int aw, int ats, float ap, int anc, int ahp) :vehicle(aw,ats,ap), numbercylinders(anc) , horsepower(ahp) { } void print( ) { vehicle::print( ); //调用基类的函数 cout << "\n cylinders:" << numbercylinders; cout << "\n horsepower:" << horsepower; int numbercylinders; //汽缸数 int horsepower; //马力
面向对象程序设计 ∥应用程序 main cpp #include "vehicle. h void main( 950.0.06100对提要 av. print();∥调用基类函数 ac prin();∥调用派生类函数 第7章派生与继承性 7.1派生类 结果: weight:15000pds 72多重继承 top speed: 60 mph price$3000000 73类模板的派生 weight: 3500 pds top speed: 100 mph price $12000.00 cylinders: 6 horsepower: 120
第 7章 派生与继承性 7.1 派生类 7.2 多重继承 7.3 类模板的派生 //应用程序 main.cpp #include " vehicle.h " void main ( ) { vehicle av(15000, 60, 300000); //创建对象 car ac(3500, 100, 12000, 6, 120);//创建对象 av.print( ); //调用基类函数 ac.print( ); //调用派生类函数 } 结果: weight: 15000 pds top speed: 60 mph price $300000.00 weight: 3500 pds top speed: 100 mph price $12000.00 cylinders: 6 horsepower: 120
面向对象程序设计 例1有关内容总结 1.在已有的类中加入新功能而创建的类称 为原有类的派生类 堂提要 2.继承的方式有三种:公有、保护、私有。 般为公有或保护 第7章派生与继承性 3.继承类具有基类的所有成员,并可对已71派生类 有的成员进行重新定义。在派生类中访72多重继承 间基类的函数用表明,如在cr中有:73类模板的派生 vehicle: print() 4.问题派生类的构造函数的定义? 派生类对基类的访问权限?
第 7章 派生与继承性 7.1 派生类 7.2 多重继承 7.3 类模板的派生 例 1 有关内容总结 1. 在已有的类中加入新功能而创建的类称 为原有类的派生类。 2. 继承的方式有三种:公有、保护、私有。 一般为公有或保护 3. 继承类具有基类的所有成员,并可对已 有的成员进行重新定义。在派生类中访 问基类的函数用::表明,如在 car 中有: vehicle::print( ); 4. 问题 派生类 的构造函数的定义? 派生类对基类的访问权限?
面向对象程序设计 派生类与基类的构造函数 派生类的构造函数自动执行基类的构 造函数,且基类的构造函数先执行。 2。派生类的构造函数可不显式地写出基类 堂提要 的构造函数,此时调用基类的无参数构 造函数,但若要传递参数,必须写出 第7章派生与继承性 如:car( int aw, int ats, float ap, int anc, int ahp)7.1派生类 vehicle(aw, ats, ap), numbercylinders(anc)7.2多重继承 horsepower(ahp)i i 73类模板的派生 创建对象: vehicle av(15000,60,300000 car ac(3500,100,12000,6,120)
第 7章 派生与继承性 7.1 派生类 7.2 多重继承 7.3 类模板的派生 派生类与基类的构造函数 1。派生类的构造函数自动执行基类的构 造函数,且基类的构造函数先执行。 2。派生类的构造函数可不显式地写出基类 的构造函数,此时调用基类的无参数构 造函数,但若要传递参数,必须写出 如:car(int aw, int ats, float ap, int anc, int ahp) :vehicle(aw,ats,ap), numbercylinders(anc) , horsepower(ahp) { } 创建对象: vehicle av(15000, 60, 300000); car ac(3500, 100, 12000, 6, 120);
面向对象程序设计 派生类对基类成员的访问规则 访问有三种类型: 1.内部访问:由类自己的函数访问,如前例 类 vehicle中的函数 print 堂提要 void print(& cout <<n weight: < weight <<"pds cout <<"n top speed: < topspeed <<"mph 第7章派生与继承性 cout<< "n price: $"<< price;) 7.1派生类 2.类的对象访问:由类创建的对象访问。72多重继承 vehicle av(15000,60,3000000创建对象 73类模板的派生 av.print();∥调用基类函数 3.外部访问:由友元、继承类函数等访问
第 7章 派生与继承性 7.1 派生类 7.2 多重继承 7.3 类模板的派生 派生类对基类成员的访问规则 3. 外部访问:由友元、继承类函数等访问 访问有三种类型: 1. 内部访问:由类自己的函数访问,如前例 类vehicle 中的函数 print void print( ) { cout << "\n weight:" << weight << "pds"; cout << "\n top speed:" << topspeed << "mph"; cout << "\n price: $ "<< price; } 2. 类的对象访问:由类创建的对象访问。 vehicle av(15000, 60, 300000); //创建对象 av.print( ); //调用基类函数
面向对象程序设计 公有派生类对基类成员的访问规则 基类的私有数据。 内部访问OK 对象访问NON 堂提要 外部访问友元OK,继承类NON 2.基类的保护数据。 第7章派生与继承性 内部访问OK 对象访问NON 7.1派生类 外部访问友元OK,继承类OK 72多重继承 73类模板的派生 3.基类的公有数据。 内部访问OK 对象访问OK 外部访问友元OK,继承类OK
第 7章 派生与继承性 7.1 派生类 7.2 多重继承 7.3 类模板的派生 公有派生类对基类成员的访问规则 1. 基类的私有数据。 内部访问 OK 对象访问 NON 外部访问 友元OK,继承类NON 2. 基类的保护数据。 内部访问 OK 对象访问 NON 外部访问 友元OK,继承类OK 3. 基类的公有数据。 内部访问 OK 对象访问 OK 外部访问 友元OK,继承类OK