Loading... # 什么是联编 参考博客:https://blog.csdn.net/gaoxin1076/article/details/8298279 ![image.png](http://www.irohane.top/usr/uploads/2021/03/4216963444.png) 从图中可以知道,联编就是映射关系,决定函数映射到哪一个类。硬核理解于【选择】 那么联编分为:静态联编、动态联编 ## 静态联编 在程序编译的时候就已经决定了,上图,如果 A.func() 并没有B什么事。那么在编译的时候就值会判定走A。一旦映射完成,无法改变选择。 ## 动态联编 在编译的时候还是不知道到底应该选择哪个func函数,只有在真正执行的时候,它才确定。 # 多态 静态多态: 模板 重定义(redefining),也叫隐藏。子类重新定义父类有相同名称的非虚函数 (参数列表可以不同)。 子类若有和父类相同的函数,那么,这个类将会隐藏其父类的方法。除非你在调用的时候,强制转换成父类类型。在子类和父类之间尝试做类似重载的调用时不能成功的。 重载(overload):是函数名相同,参数列表不同,返回类型不同不构成重载。 --- 动态多态: 派生类对象的地址可以赋值给基类[指针](http://c.biancheng.net/c/80/)。对于通过基类指针调用基类和派生类中都有的同名、同参数表的虚函数的语句,编译时并不确定要执行的是基类还是派生类的虚函数;而当程序运行到该语句时,如果基类指针指向的是一个基类对象,则基类的虚函数被调用,如果基类指针指向的是一个派生类对象,则派生类的虚函数被调用。这种机制就叫作“多态(polymorphism)”。 ``` #include <iostream> using namespace std; class A { public: virtual void Print() { cout << "A::Print" << endl; } }; class B : public A { public: virtual void Print() { cout << "B::Print" << endl; } }; void Printlnfo(A & r) { r.Print(); //多态,调用哪个Print,取决于r引用了哪个类的对象 } int main() { A a; B b; Printlnfo(a); //输出 A::Print Printlnfo(b); //输出 B::Print return 0; } ``` 静态联编和动态联编都是属于多态性的,它们是在不同的阶段进对不同的实现进行不同的选择; 其实多态性的本质就是选择。因为存在着很多选择,所以就有了多态。 ## 虚函数 声明虚函数通过父类指针指向子类对对象如果是虚函数的话优先调用虚函数。创建虚函数的基类都有一个虚函数表。在类地址的前四个字节存储虚函数表的地址。 ## 纯虚函数 纯虚函数是一种特殊的虚函数,在许多情况下,在[基类](https://baike.baidu.com/item/%E5%9F%BA%E7%B1%BB/9589663)中不能对[虚函数](https://baike.baidu.com/item/%E8%99%9A%E5%87%BD%E6%95%B0/2912832)给出有意义的[实现](https://baike.baidu.com/item/%E5%AE%9E%E7%8E%B0/10801654),而把它声明为纯虚函数,它的实现留给该基类的[派生类](https://baike.baidu.com/item/%E6%B4%BE%E7%94%9F%E7%B1%BB/9589520)去做。这就是纯虚函数的作用。 纯虚函数也可以叫[抽象函数](https://baike.baidu.com/item/%E6%8A%BD%E8%B1%A1%E5%87%BD%E6%95%B0/8101234),一般来说它只有函数名、参数和返回值类型,不需要函数体。这意味着它没有函数的实现,需要让派生类去实现。 C++中的纯虚函数,一般在函数签名后使用=0作为此类函数的标志。 凡是含有纯虚函数的类叫做[抽象类](https://baike.baidu.com/item/%E6%8A%BD%E8%B1%A1%E7%B1%BB)。这种类不能声明对象,只是作为基类为派生类服务。除非在派生类中完全实现基类中所有的的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。 ## 抽象类 包含纯虚函数的类称为[抽象类](https://baike.baidu.com/item/%E6%8A%BD%E8%B1%A1%E7%B1%BB)。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。 最后修改:2021 年 03 月 08 日 © 来自互联网 赞 0 如果觉得我的文章对你有用,请随意赞赏