美文网首页c++学习笔记
c++学习笔记之继承和多态

c++学习笔记之继承和多态

作者: chzphoenix | 来源:发表于2017-12-14 11:43 被阅读10次

c++学习笔记系列:

http://blog.csdn.net/column/details/17301.html

1、public 继承

class A : public B

(1)友元函数不能被继承

(2)protected成员可以被派生类和友元访问

2、派生类

(1)派生类构造函数如果未显式调用基类构造函数,则会隐式调用基类默认构造函数,没有则报错。

(2)派生类头文件中#include包含基类头文件

(3)派生类调用基类函数(已在派生类中重新定义过)

基类名::基类函数 如 B::b(...)

重新定义函数时一般会调用其基类函数,如果不加“基类名::”则会调用自己,形成无限递归。

(4)派生类有一个与基类中同名但签名不同的成员函数,那么会隐藏基类的那个成员函数。如:

 基类A有一个成员函数  void go(int i)

 派生类B有                  void go(int i, int j)

 b.go(1)会编译报错参数太少。(如果派生类没有go函数,则会直接调用基类的)

(5)多层派生关系:构造函数会从基类->派生类的顺序调用,析构函数则相反。

(6)派生类不会继承基类的构造函数、析构函数和重载的运算符。

3、public/private/protected 继承

继承public基类:基类的public成员成为派生类public成员,protected成员成为派生类的 protected成员,派生类不能直接访问基类private成员。

继承protected基类:基类的public、protected成员成为派生类的protected成员,派生类不能直接访问基类private成员。

继承private基类:基类的public、protected成员成为派生类的private成员,派生类不能直接访问基类private成员。

4、基类、派生类指针

(1)基类指针指向派生类对象,可以调用基类成员,调用派生类成员则报错,但可以将基类指针显式强转成派生类指针就可以调用了。所以句柄类型决定哪个类函数被调用。

(2)派生类指针指向基类对象,编译错误。

5、virtual

virtual void a(...)

当通过指针调用virtual函数,则不再根据句柄来决定,而是根据指针所指的对象的类型选择合适的函数调用。

(1)一个函数声明为virtual,那么从整个继承层次的那一点向下所有类中都保持virtual,即使派生类重载此函数时并没有显式的声明virtual。

所以重载最好也显式声明virtual。

(2)当virtual函数通过按名引用被调用,如a.b(),调用哪个函数在编译时已经决定,即静态绑定,并不是多态性行为。因此动态绑定只能通过指针句柄来完成。

6、抽象类

通过声明类的一个或多个virtual函数为纯virtual函数,可以使一个类成为抽象类。

纯virtual函数 virtual void a(...) const = 0;

“=0”称为纯指示符。

派生类必须重载纯virtual函数,否则实例化时编译报错。

7、运行时类型信息RTTI(dynamic_cast\typeid\type_info)

dynamic_cast<class>(...) 向下强制类型转换

typeid(...)返回一个type_info对象的引用,其成员函数name()返回typeid实参的类型名称字符串(如“Class A”)。注意这个字符串与编译器有关,不同编译器可能不同。

8、virtual析构函数

删除一个派生类对象却使用基类指针,这样就无法调用派生类析构函数,会报行为未定义错误。

解决方法是声明基类析构函数为virtual,即使派生类析构函数与基类的不同名,也可以使这些析构函数为virtual函数,这时删除就能正常销毁。

(1)如果一个类会有virtual函数,就要提供一个virtual析构函数

(2)构造函数不能声明为virtual

相关文章

  • c++学习笔记之继承和多态

    c++学习笔记系列: http://blog.csdn.net/column/details/17301.html...

  • 深刻剖析之c++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • iOS 语言三大特性

    封装 、 继承、多态OC学习篇之---类的三大特性(封装,继承,多态) - Android应用安全防护和逆向分析-...

  • C++的多态

    C++三大特性:封装、继承和多态。其中最好理解的就是封装了,继承作为C++面向对象的特征也不难理解,那么多态,应该...

  • C++学习笔记:(五)继承&&多态

    本文章分为知识点、例子和心得,交流群728483370,一起学习加油! 7.组合、继承与多态性 7.1 组合 7....

  • 深入研究C++多态(虚函数和虚继承)

    面向对象的三大特性是封装、继承和多态。多态是非常重要的一个特性,C++多态基于虚函数和虚继承实现,本文将完整挖掘C...

  • 2020-07-06----《C++类的学习》

    函数重载:同名不同参。 C++类的特点:封装、继承、多态。 //多态与函数重载是啥关系? 虚函数:和软件架构相关 ...

  • (四)C++中的继承、多态和模板函数

    C++中的继承、多态和模板函数 一、继承 1、属性和方法的继承 继承可以更好的实现代码的重用性 2、通过子类给父类...

  • 技能

    C++ C++特性 C++11 多态和继承 构造函数 析构函数 手写代码实现string类 手写代码实现智能指针 ...

  • C++学习笔记(3)

    摘要:本篇对C++的三个重点「封装,继承,多态」的学习总结与使用。 很遗憾,在坚持了一段时间c++的学习后,有点想...

网友评论

    本文标题:c++学习笔记之继承和多态

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