python 多继承,python面向对象的继承和多态
第一,继承性和多态性;
类之间的继承;
基类,(父类);
成员变量:描述类的属性。
成员:函数
派生类(子类)
反映与基类的差异
继承;基类和派生类之间的访问权限
1 .公共继承
基类中的公共成员变量被继承后在派生类中也是公共的(可以在类外访问);
基类中受保护的成员变量在被继承后可以在派生类中被访问。派生类中有两种权限,protect。
(子类对象不能在类外访问);
基类中的私有成员变量继承后不能在派生类中访问,但已经被继承了(不能在类外访问);
2 .受保护的遗产;
3 .私人继承;
注意;基类中的私有成员是从子类中继承的,但是不能直接访问!
访问权限;受公共保护的私人;
兼容的分配规则;
1.派生类的对象可以直接赋给基类的对象,反之亦然。
总结;
1.继承的概念
2.子类中继承方式不同的基类中不同访问权限成员的权限变化。
3.分配兼容性规则-公共
4.隐藏同名(派生类不能访问与基类同名的成员)(在与基类同名的成员前添加基类名和作用域限定符)
5.派生类中的默认成员函数
如何让一个类无法继承?
在基类中,使构造函数成为私有的;派生类的构造函数初始化不能访问基类的构造函数,并且不能在类外定义。
基本类对象。
关键词;决赛;
功能;该类是继承的。
钻石传承;单一遗传和多重遗传复合
缺陷;存在歧义;
解决歧义;
1.使访问明确化。
2.虚拟继承;
比溥的继承多了四个字节。
派生类的对象模型是颠倒的:基类在下面,派生类在上面。
编译器为派生类生成了默认构造函数,该构造函数用于填充构造函数中对象的前四个字节。
编译器为派生类生成了默认构造函数,该构造函数用于填充构造函数中对象的前四个字节。
多态性;
1.什么是多态性?
多态性字面意思是“多种状态”。在面向对象语言中,实现接口的许多不同方法都是多态的。
c中也是如此,同样的操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,您可以通过指向基类来调用和实现派生类中的方法。
c,实现多态性的方法有以下几种:虚函数、抽象类、覆盖和模板(注:重载与多态性无关)。
2.多态实现的条件;(在继承系统中)
基类必须包含虚函数,派生类必须重写基类中的虚函数。
如何调用虚函数:通过指针或者基类的引用调用虚函数。
性能;多态行为;程序运行时,Anjiaoji类指针指向不同的子类,调用不同子类的虚函数。
两个条件缺一不可,否则多态性无法实现。无论传递哪种对象,都调用基类的虚函数。
重写;
重写派生类的虚函数(一个在基类中,一个在派生类中)
派生类中的虚函数原型必须与基类中的虚函数原型完全相同(返回值类型、函数名和参数列表)。
例外情况;
协变-基类的虚函数返回基类的指针或引用。
派生类的虚函数返回派生类的指针或引用。
基类的虚函数的返回值类型与派生类的不同。
破坏性功能;
只要基类的析构函数是虚函数,派生类的析构函数就在定义后被重写。
基类的析构函数名称不同于派生类的析构函数名称。
基类和派生类的虚函数的访问权限可以不同;将通用基类的虚函数设置为
公众的
基类和派生类的虚函数的访问权限可以不同;将通用基类的虚函数设置为public
3.关键词;最后的
最后的装饰
最终虚函数——这个虚函数不能被派生类重写。
帅气的冷面;Override帮助用户检查他们是否可以重写;
号码重载,同名,隐藏覆盖
4.抽象类;
概念;
包含纯虚函数的类称为抽象类。无法实例化对象。
如果一个类包含虚函数
-1.该对象还有四个字节;
-2.四个字节的内容在构造中填充。
-3.在前四个字节中放一个指针(虚拟表指针)。地址——-"指向虚函数。
虚函数的存储规则;它们按照类中声明的顺序存储。
虚拟基表的构造规则;
按照虚函数在类中的声明顺序依次将虚函数放入虚拟表中;
派生类中虚表的构造规则;
-1.复制基类虚拟表的内容,放入派生类虚拟表中。
-2.如果派生类重写了基类的虚函数,则用派生类自己的虚函数替换它,并在虚拟表中的相同偏移位置
基类虚函数
-3.对于派生类本身新增加的虚函数,按照类中声明的顺序放在虚表的末尾。
对虚函数的调用
-1.从对象的前四个字节获取虚拟表的地址。
-2.传递这个指针
-3.从虚拟表中获取当前调用的虚函数的地址。
-4.调用虚函数
5.多态实现原理
类;虚函数的大小->类->四个多字节->监控窗口3354 >虚函数地址
派生类:NULL 3354“虚表的内容和基类的内容完全一样-”但是虚表指针不一样(基类和派生类用的不是同一个。
虚拟表
6.多态的调用原则:必须满足实现多态的条件。
-1.从对象的前四个字节中获取虚拟表的地址
-2.向虚函数传递参数:用户定义的参数和这个指针。
-3.从虚拟表中找到系数函数的地址
-4.打电话
内联函数(编译时已扩展)的代码可以编译,但不能实现多态性。
为什么静态成员函数不能做虚函数?
函数调用——“必须先找到虚表——”从对象的前四个字节获取虚表指针——必须有对象;
没有(this),静态成员函数无法创建对象;
构造函数初始化一个对象。
如果类包含虚函数,那么虚表指针必须放在构造中对象的前四个字节中。
假设构造函数可以作为虚函数使用:通过虚拟表调用的构造函数从对象的前四个字节中获取数据。
构造函数不能用作虚函数。
7.多态性分类;静态多态性和动态多态性
静态多态(静态绑定/早期绑定):在编译期间,已经确定了应该调用哪个函数。
函数重载函数模板
动态多态(动态绑定/后期绑定):运行时确认应该调用虚函数。
在继承系统中:通过重写基类虚函数。
8.一般不会采用继承方式——代码复用。
混凝土类
派生列
基类中的成员变量和成员函数继承自子类。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。