第14讲多继承和虚基类 教学目的与要求: 了解虚基类的声明和作用。 掌握多基派生类的声明和构造函数,虚基类 教学内容提要: 1、多继承的声明; 2、多继承的构造函数和析构函数; 3、虚基类; °教学重点:多继承的派生类的声明和构造函数。 教学难点:多继承的派生类的声明和构造函数。 教学进度:P136P148 教学过程
•教学目的与要求: 了解虚基类的声明和作用。 掌握多基派生类的声明和构造函数,虚基类 •教学内容提要: 1、 多继承的声明; 2、多继承的构造函数和析构函数; 3、虚基类; •教学重点:多继承的派生类的声明和构造函数。 •教学难点:多继承的派生类的声明和构造函数。 •教学进度:P136~P148 •教学过程: 第 14 讲 多继承和虚基类
(14,1多继承的声明】 多继承可以看作是单继承的扩充,它是指由多个基类派生出 个新类的情形 声明形式如下: class派生类名:派生类型1基类名1,派生类型2基类名2, 派生类型n基类名n 派生类新成员声明 每一个派生类型对应的是紧接其后给出的基类,而且必须给每 个基类指定一种派生类型,如果缺省,相应的基类则取私有派 生类型,而不是和前一个基类取相同的派生类型
多继承可以看作是单继承的扩充,它是指由多个基类派生出一 个新类的情形。 声明形式如下: class 派生类名:派生类型1 基类名1,派生类型2 基类名2,… 派生类型n 基类名n { 派生类新成员声明 }; 每一个派生类型对应的是紧接其后给出的基类,而且必须给每 个基类指定一种派生类型,如果缺省,相应的基类则取私有派 生类型,而不是和前一个基类取相同的派生类型。 【 14.1 多继承的声明】
比如: class a lass B class C: public A, B 说明:类A派生类C时,采用的是公有派 生,也即类A中的公有和保护成员被类C 继承过来且成员类型保持不变,但类C中 例141(多继承) 的成员函数不能访问类A的私有成员 #includesiostream.h> class a public: void setx(int a)x=a; 1 void sety(int b)y=b; 1
多继承 #include<iostream.h> class A { public: void setx(int a){x=a;} void sety(int b){y=b;} 比如: class A { ... }; class B { ... }; class C:public A,B { ... } 说明:类A派生类C时,采用的是公有派 生,也即类A中的公有和保护成员被类C 继承过来且成员类型保持不变,但类C中 的成员函数不能访问类A的私有成员。 例 14-1
int getxo constreturnx (续) int geto constreturn y; protected: int x private int y, class B publIc: void setzlint czc int getz const return protected: it z; class c: public a, private b public void setcz(int cset(c); int getczo constreturnz; 3 int getsumo const(return x+gety o+z
int getx() const{return x;} int gety() const{return y;} protected: int x; private: int y; }; class B { public: void setz(int c){z=c;} int getz() const {return z;} protected: int z; }; class C:public A,private B { public: void setCz(int c){setz(c);} int getCz() const{return z;} int getsum() const{return x+gety()+z;} (续)
续 void maino csetx (2); csety( 3); c.setcz5) cout<<"X"<<c getx(<<tY=N<<c.getyo<<tzF<<c. getczo<<endl; cout<<X+Y+lF<<cgetsum(<<endl; 2 Y=3 X+Y+Z=10 多继承可以看作是多个单继承的组合,单继承可以看作是多继承的特例
X=2 Y=3 Z=5 X+Y+Z=10 多继承可以看作是多个单继承的组合,单继承可以看作是多继承的特例。 }; void main() { C c; c.setx(2); c.sety(3); c.setCz(5); cout<<″X=″<<c.getx()<<″\tY=″<<c.gety()<<″\tZ=″<<c.getCz()<<endl; cout<<″X+Y+Z=″<<c.getsum()<<endl; } (续)