美文网首页
【C++面向对象备忘录】4 组合与继承,多态性实现

【C++面向对象备忘录】4 组合与继承,多态性实现

作者: shawn233 | 来源:发表于2018-03-01 09:14 被阅读0次

组合

  • 组合就是把用户定义类的对象作为新类的数据成员
  • 必须用初始化列表去初始化对象成员

继承

派生类构造

  • 基类成员的初始化由基类的构造函数完成。派生类的构造函数调用基类的构造函数完成基类成员的初始化。

  • 派生类构造函数可以隐式调用基类缺省的构造函数,也可以在派生类的构造函数的初始化列表显式地调用基类的构造函数。

  • 也就是说,如果没有在派生类的构造函数中调用基类的构造函数,其实会调用缺省参数时调用的基类构造函数(带缺省值的构造函数Base(int i = 1))

派生类析构

  • 派生类的析构函数只析构自己新增的数据成员,基类成员的析构由基类的析构函数析构

  • 派生类析构函数会自动调用基类的析构函数

  • 派生类对象析构时,先执行派生类的析构函数,再执行基类的析构函数

赋值运算符重载

  • 派生类不能继承基类的赋值运算

  • 如果派生类没有定义赋值运算符重载函数:系统提供一个默认的赋值运算符重载函数,该函数对派生类中的基类对象调用基类的赋值运算符重载函数,对派生类新增数据成员相应赋值

  • 若在派生类中重载赋值运算符:在重载函数中要显式调用基类的赋值运算符重载函数来对基类成员赋值

  • 显示调用基类方法这里需要加域名限定

Base::operator=(tmp);

多态性

多态性

多态性:不同对象收到相同的消息时产生不同的动作。

实现:

  1. 函数重载(静态联编);
  2. 虚函数(动态联编)。

虚函数

  • 虚函数的定义:在基类中用关键词virtual说明,并在派生类中重新定义的函数称为虚函数。在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数与参数类型的顺序都必须与基类中的原型完全相同

  • 虚函数是与基类指针指向派生类对象,或基类对象引用派生类对象结合起来实现多态性。

  • 当基类指针指向派生类对象或基类对象引用派生类对象时,对基类指针或基类的虚函数,系统会到相应的派生类中对象调用寻找此虚函数的重定义。如找到,则执行派生类中的函数。如没有找到,则执行基类的虚函数。

  • 在派生类中重新定义虚函数时,它的原型必须与基类中的虚函数完全相同。否则编译器会把它认为是重载函数,而不是虚函数的重定义。

  • 派生类在对基类的虚函数重定义时,关键字virtual可以写也可以不写。不管virtual写或者不写,该函数都被认为是虚函数。但最好是在重定义时写上virtual

虚析构函数

如果用基类指针指向派生类对象,那么在析构时,如果调用的是基类的析构函数,则会造成内存泄漏。因此,基类的析构函数应定义为虚函数。

将基类的析构函数定义为虚函数

纯虚函数

纯虚函数:是一个在基类中说明的虚函数,它在该基类中没有定义,但要在它的派生类里定义自己的版本,或重新说明为纯虚函数

virtual 类型 函数名 (参数表)=0

抽象类

抽象类:如果一个类中至少有一个纯虚函数,则该类被称为抽象类

抽象类使用说明:

  • 抽象类只能作为其他类的基类,不能建立抽象类的对象

  • 可以声明指向抽象类的指针或引用,此指针可指向它的派生类,进而实现多态性

  • 抽象类不能用作参数类型、函数返回类型或显式转换类型

  • 如果派生类中给出了基类所有纯虚函数的实现,则该派生类不再是抽象类,否则仍为抽象类

多继承与虚基类

相关文章

  • 【C++面向对象备忘录】4 组合与继承,多态性实现

    组合 组合就是把用户定义类的对象作为新类的数据成员 必须用初始化列表去初始化对象成员 继承 派生类构造 基类成员的...

  • GeekBand C++面向对象高级编程(三)

    本笔记为GeekBand C++面向对象高级编程(上)第二周课程之总结。 组合与继承 组合(composition...

  • C++笔记3--(Boolan)

    C++面向对象 类对象之间三种关系:组合(Composition),继承(Inheritance),委托(Dele...

  • C++ 虚函数 总结

    虚函数是 C++ 实现多态的方式。 什么是多态?多态性常被视为自封装和继承之后,面向对象的编程的第三个支柱。如果举...

  • C++雾中风景4:多态引出的困惑,对象的拷贝?

    C++作为一门面向对象的语言,自然具备了面向对象的三大特征:封装,继承,多态。在学习多态性质的过程中,发现了C++...

  • 面向对象设计基础&原则

    面向对象设计基础 抽象 封装 继承 多态 面向对象设计原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程

  • 【python面试指北】3.类和面向对象

    面向对象编程 封装、继承、多态 组合与继承 优先使用组合(has a)而非继承(is a) 类变量和实例变量的区别...

  • Chapter 9 继承与多态

    9.1 继承 面向对象程序设计语言有三大特性:封装、继承和多态性。继承是面向对象语言的重要特征之一,没有继承的语言...

  • Java 4 继承与多态

    4.1 继承 面向对象程序设计语言有三大特性:封装、继承和多态性。继承是面向对象语言的重要特征之一,没有继承的语言...

  • C++<第二十五篇>:多态

    多态性是面向对象程序设计的一个重要特征,利用多态性可以设计和实现一个易于扩展的系统。在C++语言中,多态性是指具有...

网友评论

      本文标题:【C++面向对象备忘录】4 组合与继承,多态性实现

      本文链接:https://www.haomeiwen.com/subject/senwxftx.html