资源描述:
《C++面向对象程序设计 教学课件 作者 朱战立 张玉祥 C++5.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五章继承概念派生类的声明及构造函数设计不同继承方式的权限及二义性问题解决继承性定义一个新的类拥有全部被继承类的成员变量和成员函数(不包括构造函数和析构函数)基类(父类)派生类(子类)引入原因程序功能扩充模块重用基类派生类派生类与基类的关系基类是所有派生类共有属性和服务的抽取派生类是基类的具体化要设计的许多类都有相似的服务(如屏幕显示),但这些服务的代码设计没有共同性。这时我们可以定义基类中是抽象的、没有具体代码的虚函数。产生派生类时,将再次重载这些在基类中已定义的虚函数,并具体定义这些函数的功能。有些派生类与基类的关系会是上述
2、两种关系的合成。派生类定义单重继承派生类定义class<派生类名>:[public/private/protected]<基类名>{<派生类成员变量和成员函数定义>};AB1B2C12C11C22C21派生类定义多重继承派生类定义class<派生类名>:[继承方式1][<基类名1>],[继承方式2],[<基类名2>],…[继承方式n][<基类名n>]{<派生类成员变量和成员函数定义>};AB1B2C1C3C2三种继承方式访问权限关系派生类基类public方式private方式protected方式类内类外类内类外类内类外priv
3、ate不可见不可见不可见不可见不可见不可见protectedprotected不可见private不可见protected不可见publicpublicpublicprivate不可见protected不可见例5.1public、private继承方式#includeclassA{private:inta1;protected:inta2;public:inta3;A(intx1,intx2,intx3):a1(x1),a2(x2),a3(x3){}~A(void){}};classB:publicA{p
4、rivate:intb1;protected:intb2;public:intb3;B(intx1,intx2,intx3,inty1,inty2,inty3):A(x1,x2,x3),b1(y1),b2(y2),b3(y3){}~B(void){}voidPrint(void)const;};派生类构造函数显式调用基类构造函数,为基类子对象赋值voidB::Print(void)const{//cout<<"a1="<5、out<<"b1="<6、{BMyB(1,2,3,4,5,6);MyB.Print();Show(MyB);}赋值兼容规则前提:派生类公有继承基类规则1:可以用派生类对象为基类对象赋值;规则2:可以用派生类对象初始化基类引用对象;规则3:可以把指向派生类对象的指针赋给基类对象的指针;规则4:可以把派生类对象的地址赋给基类对象的指针。例5.3赋值兼容规则示例classA{protected:inta1;floata2;public:A(intx1=0,floatx2=0):a1(x1),a2(x2){}A(A&a):a1(a.a1),a2(a.a2){}~
7、A(void){}intGetA1(void)const{returna1;}floatGetA2(void)const{returna2;}};classB:publicA{private:intb1;floatb2;public:B(intx1=0,floatx2=0,inty1=0,floaty2=0):A(x1,x2),b1(y1),b2(y2){}B(B&b):A(b.a1,b.a2),b1(b.b1),(b.b2){}~B(void){}};voidmain(void){BmyB1(2,3,4,5);AmyA1;my
8、A1=myB1;cout<