电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Visual C++程序设计 教学课件 ppt 作者 第八章 继承与多态性

74页
  • 卖家[上传人]:E****
  • 文档编号:89351592
  • 上传时间:2019-05-23
  • 文档格式:PPT
  • 文档大小:545KB
  • / 74 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、1,目录,8.1 继承 8.2 派生类的构造函数和析构函数 8.3 重载 8.4 多态性,2,8.1 继承,一、继承 1.单继承 从一个基类派生出子类的继承称为单继承,其定义格式如下: class : 类体; 其中,继承方式规定基类中的成员在派生类中的访问权限,它可以是关键字public、private和protected三者之一。 类体部分是派生类中新增加的数据成员或成员函数,或者对基类成员的修改或重定义,这一部分也可以为空。,3,8.1 继承,一、继承 1.单继承 (1)公有继承(public)。基类的public成员作为派生类的public成员;基类的protected成员作为派生类的protected成员;而基类的私有成员仍然是私有的,派生类不可访问。 (2)私有继承(private)。基类的public成员和protected成员都作为派生类的private成员。而基类的私有成员仍然是私有的,派生类不可访问。 (3)保护继承(protected)。基类的public成员和protected成员都作为派生类的protected成员。而基类的私有成员仍然是私有的,派生类不可访问。

      2、 如果省略继承方式,系统默认为private。,4,8.1 继承,一、继承 1.单继承 例8_1 公有继承中各成员的访问。 #include class Cbase private: int x; protected: int y; public: int z; Cbase(int a, int b, int c)x=a;y=b;z=c;,5,8.1 继承,一、继承 1.单继承 int getx() return x; int gety() return y; void showbase() cout“x=“xt“y=“yt “z=“zendl; ; class Cderived:public Cbase private: int length, width; public:,6,8.1 继承,一、继承 1.单继承 Cderived(int a, int b, int c, int d, int e):Cbase(a, b, c) length=d; width=e; void show() cout“length=“lengtht “width=“widthendl; / cout“

      3、x=“xt“y=“yt “z=“zendl错误 cout“x=“getx()t“y=“yt “z=“zendl; ;,7,8.1 继承,一、继承 1.单继承 void main() Cderived d1(1,2,3,4,5); d1.showbase(); d1.show(); /cout“y=“d1.yendl错误 cout“y=“d1.gety()endl; cout“z=“d1.zendl; ,8,8.1 继承,一、继承 1.单继承 例8_2 私有继承中各成员的访问。 #include class Cbase private: int x; protected: int y; public: int z; Cbase(int a, int b, int c)x=a;y=b;z=c;,9,8.1 继承,一、继承 1.单继承 例8_2 私有继承中各成员的访问。 int getx() return x; void showbase() cout“x=“xt“y=“yt “z=“zendl; ; class Cderived:private Cbase private: int len

      4、gth, width; public:,10,8.1 继承,一、继承 1.单继承 例8_2 私有继承中各成员的访问。 Cderived(int a, int b, int c, int d, int e):Cbase(a, b, c) length=d; width=e; void showb() cout“x=“getx()t“y=“ yt “z=“zendl; ,11,8.1 继承,一、继承 1.单继承 例8_2 私有继承中各成员的访问。 void showld() cout“length=“lengtht “width=“widthendl; int getz() return z; ;,12,8.1 继承,一、继承 1.单继承 例8_2 私有继承中各成员的访问。 void main() Cderived d1(1,2,3,4,5); d1.showb(); d1.showld(); cout“z=“d1.getz()endl; ,13,8.1 继承,一、继承 2.多继承 多继承派生类的定义格式如下: class :, 类体; 其中,继承方式和单继承相同,这里不再赘述。如果继承方

      5、式省略,系统默认是私有的。,14,8.1 继承,一、继承 2.多继承 例8_3 一个多继承实例。 #include class Course1 public: int stu_num; float score1; void input() coutstu_numscore1; ;,15,8.1 继承,一、继承 2.多继承 例8_3 一个多继承实例。 class Course2 public: int stu_num; float score2; void input() coutstu_numscore2; ;,16,8.1 继承,一、继承 2.多继承 class Student: public Course1, public Course2 /声明派生类 public: void input() Course1:input(); Course2:input(); void print() cout“num=”Course1:stu_num; cout“tscore1=“score1“tscore2=“score2endl; ;,17,8.1 继承,一、继承 2.多继承 例8_3 一个

      6、多继承实例。 void main() Student z; z.input(); z.print(); ,18,8.2 派生类的构造函数和析构函数,1.派生类的构造函数 派生类构造函数的一般格式为: ():(), () 派生类中新增数据成员初始化; 其中,总参数表为派生类构造函数的形参表,参数表1是总参数表的子表,用于基类构造函数,并且和基类的某个构造函数的参数表相对应。参数表2也是总参数表的子表,用于内嵌对象初始化。冒号后面部分称为成员初始化列表,表项之间用逗号分隔。其中,基类构造函数()可以有多个,并且与基类的顺序相关。内嵌对象名()也可以有多个,是顺序无关的。,19,8.2 派生类的构造函数和析构函数,1.派生类的构造函数 例8_4 派生类中构造函数的调用顺序。 #include class A public: A() cout“A constructorn“; ; class B public: B() cout“B constructorn“; ;,20,8.2 派生类的构造函数和析构函数,1.派生类的构造函数 例8_4 派生类中构造函数的调用顺序。 class C publ

      7、ic: C() cout“C constructorn“; ; class D :A public: C c; B b; D() cout“D constructorn“; ;,21,8.2 派生类的构造函数和析构函数,1.派生类的构造函数 例8_4 派生类中构造函数的调用顺序。 void main() D d; 说明了派生类创建对象时构造函数的顺序为:基类构造函数,内嵌对象类的构造函数,派生类本身的构造函数。,22,8.2 派生类的构造函数和析构函数,1.派生类的构造函数 例8_5派生类中构造函数的调用顺序举例。 # include class A int a; public: A() a=0cout“A default constructor called.n“; A(int i)a=icout“As constructor called.n“; void prt()cout“a=“aendl; ;,23,8.2 派生类的构造函数和析构函数,1.派生类的构造函数 例8_5派生类中构造函数的调用顺序举例。 class B int b; public: B() b=0cout“Bs d

      8、efault constructor called.n“; B(int i)b=icout“Bs constructor called.n“; int getb() return b; ;,24,8.2 派生类的构造函数和析构函数,1.派生类的构造函数 例8_5派生类中构造函数的调用顺序举例。 class C:public A int c; B bb; public: C() c=0cout“Cs default constructor called.n“; C(int i, int j, int k); void print(); ;,25,8.2 派生类的构造函数和析构函数,1.派生类的构造函数 例8_5派生类中构造函数的调用顺序举例。 C:C(int i, int j, int k):A(i),bb(j) c=k; cout“Cs constructor called.n“; void C:print() prt(); cout“b=“bb.getb()endl; cout“c=“cendl; ,26,8.2 派生类的构造函数和析构函数,1.派生类的构造函数 例8_5派生类中构造

      9、函数的调用顺序举例。 void main() C c(1,2,3); c.print(); ,27,8.2 派生类的构造函数和析构函数,1.派生类的构造函数 例8_6如果将例8_5的主函数作如下修改,分析程序运行结果。 void main() C c(1,2,3),c1; c.print(); c1.print(); ,28,8.2 派生类的构造函数和析构函数,2.派生类的析构函数 派生类对象被删除时,派生类的析构函数被执行。由于析构函数不能被继承,在执行派生类的析构函数时,基类的析构函数也将被调用。删除顺序刚好和构造顺序相反,即先调用派生类析构函数,调用内嵌对象类的析构函数,调用基类的析构函数。 例8_7 前面例8_5中如果为每个类增加一个析构函数。 # include class A A()cout“As destructor called.n“; ;,29,8.2 派生类的构造函数和析构函数,2.派生类的析构函数 例8_7 前面例8_5中如果为每个类增加一个析构函数。 class B B()cout“Bs destructor called.n“; ; class C:public A C()cout“Cs destructor called.n“; ;,30,8.3 重载,1.函数重载 函数重载就是指同一个函数名对应着多个不同的函数实现,每个实现对应着一个函数体。函数重载要求函数的参数类型不同,或者参数个数不同。C+编译器在进行函数调用时是根据函数名和参数的个数或参数的类型来决定调用哪一个函数的。因此,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。否则,将无法实现重载。,31,8.3 重载,1.函数重载 例8_8 参数类型上不同的

      《Visual C++程序设计 教学课件 ppt 作者 第八章 继承与多态性》由会员E****分享,可在线阅读,更多相关《Visual C++程序设计 教学课件 ppt 作者 第八章 继承与多态性》请在金锄头文库上搜索。

      点击阅读更多内容
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.