章继承与派生.pptx
一、一、继承与派生的基本概念继承与派生的基本概念 1 1继承的概念 在C+C+语言中,可以从一个类派生出另一个类。派生出其它类的类称为基类,又称为父类。被派生的类称为派生类,又称为子类。派生类可以具有基类的特性,共享基类的成员函数,使用基类的数据成员,还可以定义自己的数据成员和成员函数。一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。第1页/共35页 一、一、继承与派生的基本概念继承与派生的基本概念 2派生类的定义格式单继承的定义格式如下:class :public:members;/派生类新定义成员 members;members;第2页/共35页 一、一、继承与派生的基本概念继承与派生的基本概念 多继承的定义格式如下:class:,public:/派生类新定义成员 members;members;members;第3页/共35页二、继承的基本方式二、继承的基本方式继承方式主要表示派生类继承基类时采用的继承方式,主要有三种,即公有继承、私有继承和保护继承。1公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时都保持原有的状态,而基类的私有成员仍然是私有的。第4页/共35页二、继承的基本方式二、继承的基本方式例11.1:#includeclass A private:int x;public:void setx(int i)x=i;void showx()coutxendl;第5页/共35页class B:public A private:int y;public:void sety(int i)y=i;void showy()showx();coutyendl;第6页/共35页void main()B b;b.setx(10);b.sety(20);b.showy();第7页/共35页二、继承的基本方式二、继承的基本方式2私有继承(私有继承(private)私有继承的特点是基类的公有成员和保护成员作为派生类的私有成员,并且不能被这个派生类的子类访问。第8页/共35页二、继承的基本方式二、继承的基本方式例11.2#includeclass A private:int x;public:void setx(int i)x=i;void showx()coutxendl;第9页/共35页class B:private A private:int y;public:void sety(int m,int n)setx(m);y=n;void showxy()showx();coutyendl;第10页/共35页void main()A a;a.setx(10);a.showx();B b;b.sety(10,20);b.showx();b.showxy();第11页/共35页二、继承的基本方式二、继承的基本方式3.保护继承(保护继承(protected)保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。第12页/共35页例11.3#includeclass Aprivate:int x;public:void setx(int i)x=i;void showx()coutxendl;第13页/共35页class B:protected A private:int y;public:void sety(int m,int n)setx(m);y=n;第14页/共35页void showxy()showx();coutyendl;第15页/共35页class C:private B public:void set(int m)setx(m);void show()showx();第16页/共35页void main()A a;a.setx(10);a.showx();B b;b.sety(10,20);b.showxy();C c;c.set(50);c.show();第17页/共35页练习:编一个设定长方形边长的类,利用继承机制求长方形的面积及周长。第18页/共35页#includeclass lengprotected:int x,y;public:void init(int a,int b)x=a;y=b;第19页/共35页class area:public leng private:int s,t;public:void setarea()s=x*y;void setgirth()t=2*(x+y);第20页/共35页void show()coutarea=sendl;coutgirth=tendl;void main()area m;m.init(5,8);m.setarea();m.setgirth();m.show();第21页/共35页三、多继承三、多继承有多个基类的派生类的继承称为多继承。多继承可以看作是单继承的扩展。多继承的定义格式如下:class:,;第22页/共35页例:#includeclass B1 private:int b1;public:void setb1(int i)b1=i;void showb1()cout“b1=“b1endl;第23页/共35页class B2 private:int b2;public:void setb2(int i)b2=i;void showb2()cout“b2=“b2endl;第24页/共35页class D:public B1,public B2 private:int d;public:void setd(int i,int j)d=i;setb2(j);第25页/共35页 void showd()showb2();cout“d=“dendl;第26页/共35页 void main()D objd;objd.setb1(10);objd.showb1();objd.setd(15,20);objd.showd();第27页/共35页#includeclass A1 private:int x1,x2;public:void init1(int n1,int n2)x1=n1,x2=n2;第28页/共35页 void set1()x1+;x2-;void show1()coutx1=x1endl;coutx2=x2endl;第29页/共35页class A2:public A1 private:int x3;public:void init2(int n)x3=n;void set2()x3=x3*x3;第30页/共35页 void show2()show1();coutx3=x3endl;第31页/共35页class A3:public A2private:int x4;public:void init3(int n)x4=n;void set3()x4=x4*3;void show3()show1();show2();coutx4=x4endl;第32页/共35页void main()A1 m;m.init1(3,7);m.set1();m.show1();A3 t;t.init2(15);t.init3(5);t.set2();t.set3();t.show3();第33页/共35页归纳与思考归纳与思考 继承是面向对象程序设计的重要特性之一,是实现代码重用的重要手段,本章介绍了继承与派生的基本概念。在继承与派生中,有三种继承的方式,分别是私有继承、公有继承及保护继承,它们有什么区别?对于具有多个基类的继承称为多继承,多继承与单继承有什么相同点,有什么不同点?第34页/共35页感谢您的观看!第35页/共35页