美文网首页
C++第六篇多态

C++第六篇多态

作者: GodsLeft | 来源:发表于2015-04-07 17:34 被阅读41次

C++中的多态性分为编译时多态性运行时多态性,编译时多态通过函数重载和模板体现,运行多态通过虚函数体现
编译、连接,成为可执行文件的过程,是把可执行代码联编在一起的过程。在运行之前就完成的联编成为静态联编;运行时才完成的联编称为动态联编


静态联编较为简单,不予赘述。

动态联编

为了达到动态联编获得运行时多态效果,通常都是用指向基类的指针来调用派生类的虚函数
定义为指向基类的指针,可以作为派生类的指针指向派生类对象,可以访问从基类继承下来的各个派生类对象
class Base{ public: void who(){ cout<<"Base"<<endl;}}; class Derived1 : public Base{ public: void who(){ cout<<"Derived1"<<endl;}}; class Derived2 : public Base{ public: void who(){ cout<<"Derived2"<<endl;}}; int main(){ Base base_obj, *p; Derived1 one_obj; Derived2 two_obj; p = &base_obj; p->who(); //输出Base,改过之后Base p = &one_obj; p->who(); //输出Base,改过之后Derived1 p = &two_obj; p->who(); //输出Base,改过之后Derived2 return 0; }
将基类改为virtual void who(){ cout<<"Base"<<endl;}
一个类的实例也被认为是其基类的实例

纯虚函数和抽象类

纯虚函数:是在基类中声明的虚函数,但没有具体的函数定义体,具体定义在各个派生类中。一般格式:
virtual 函数原型 = 0;
包含虚函数的类称为抽象类,例如:
class CClosedFigure{ public: virtual void Draw() = 0; virtual double Perimeter() = 0; virtual double Area() = 0; };
抽象类没有完整的实现,无法实例化,但是可以创建指向抽象类的指针
CClosedFigure *p; //是正确的

相关文章

  • C++第六篇多态

    C++中的多态性分为编译时多态性和运行时多态性,编译时多态通过函数重载和模板体现,运行多态通过虚函数体现编译、连接...

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

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

  • 多态的C++实现

    多态的C++实现 1 多态的原理 什么是多态?多态是面向对象的特性之一,只用父类指针指向子类的对象。 1.1 多态...

  • C++ 的多态(Polymorphism), virtual f

    多态 c++支持两种多态,编译时多态和运行时多态但其实编译时多态根本不是真正的多态,编译时多态就是函数的重载,ov...

  • 面试题目收集总结

    C++: 多态: 多态性都有哪些?(静态和动态,然后分别叙述了一下虚函数和函数重载) c语言和c++有什么区别?(...

  • C++的多态

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

  • 实现golang语言的多态

    如何实现golang语言的多态? C++里面有多态是其三大特性之一,那么golang里面的多态我们该怎么实现? g...

  • Swift 多态实现探究

    多态 父类指针指向子类对象 Swift 中多态的实现类似于 c++ 中的虚表 OC 多态实现利用的是 Runtim...

  • C++编译期多态和运行期多态

    C++多态有多种实现方式,在面对对象编程时,采用的是运行期多态,也称动态多态。在泛型编程中,多态基于模板的具现化与...

  • c++多态

    什么是多态性? 多态:相同对象收到不同消息或不同对象收到相同消息时产生不同的动作。C++支持两种多态性:编译时多态...

网友评论

      本文标题:C++第六篇多态

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