美文网首页程序员C++
C++ 虚函数、纯虚函数、虚基类、抽象类

C++ 虚函数、纯虚函数、虚基类、抽象类

作者: 爱秋刀鱼的猫 | 来源:发表于2017-06-28 20:10 被阅读0次

纯虚函数:纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”.纯虚函数不能实例化对象。

虚函数:虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数,是C++中多态性的一个重要体现。利用基类指针访问派生类中的虚函数,这种情况下采用的是动态绑定技术。

动态绑定:基类指针是调用派生类的中的成员函数还是调用基类中的成员函数要到程序运行时确定。主要看此时基类指针所指向的对象。
这里要涉及一些很重要的概念,也是我最近看完Effective C++才明白的东西,记录下来。这些概念就是静态类型和动态类型,静态绑定和动态绑定。静态绑定和动态绑定。静态绑定是说前期绑定。
所谓对象的静态类型,就是它在程序中被声明的时候采用的类型。
考虑下面的class继承体系:

class Shape{
virtual void draw(color = Red) const=0;
...
...
};
class Rectangle:public Shape{
virtual void draw(color = Red) const;
...
...
};
class Circle:public Shape
{
virtual void draw(color = Red) const;

...
...
};

现在考虑以下这些指针:

Shape* ps;//静态类型为Shape*
Shape*pc =new Circle;//静态类型Shape*
Shape*pr = new Rectangle;//静态类型Shape*

在本例中,ps,pc,pr都被声明为Shape*类型的,所以它们的静态类型都是Shape*。注意:无论它们真正指向什么,它们的静态类型都是Shape*.
所谓的对象的动态类型是指“当前所指对象的类型”。也就是说,动态类型可以表现出一个对象将会有什么行为。根据上面的例子,pc的动态类型是Circle*,pr的动态类型是Rectangle*。ps没有动态类型,因为它没有指向任何对象。
动态类型一如其名所示,可以在执行过程中改变(通常是经过赋值运算):

ps=pc;  \\ps的动态类型如今是Circle*
ps=pr;   \\ps的动态类型如今是Rectangle*

Virtual函数系动态绑定而来,意思是调用一个virtual函数的时候,究竟调用的是哪一个函数代码,取决于发出调用的那个对象的动态类型

ps->draw(); \\调用的是Rectangle::draw(Red)

相关文章

  • C++抽象类(纯虚函数)

    C++抽象类 一、纯虚函数定义. 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己...

  • 纯虚函数和抽象类

    纯虚函数和抽象类 概念 纯虚函数:没有函数体的虚函数。 抽象类:包含纯虚函数的类就称为抽象类。 纯虚函数就是在函数...

  • c++语法4

    接上一篇继续学习抽象类、函数模板 抽象类 c++中的抽象类是通过纯虚函数体现的,凡是含有纯虚函数的类叫做抽象类纯虚...

  • C++ - 纯虚函数与抽象类

    纯虚函数:没有函数体的虚函数 抽象类:包含纯虚函数的类只能作为基类来派生新类使用不能创建抽象类的对象抽象类的指针和...

  • C++面试题系列:纯虚函数,虚函数,抽象类,纯抽象类

    C++面试题系列:纯虚函数,虚函数,抽象类,纯抽象类 2020年10月15日 14:40

  • ★01.基础概念

    抽象类:含有虚函数的类。 抽象基类:含有纯虚函数的类。 虚基类:多重继承中虚继承的基类。 类静态数据成员的定义必须...

  • 慕课网-C++远征之多态篇(中)-学习笔记

    c++远征之多态篇 纯虚函数 & 抽象类 例子: 纯虚函数: 没有函数体 直接等于0 在虚函数表中直接写为0, 包...

  • 4.0 C++远征:纯虚函数与抽象类

    3-1纯虚函数抽象类 [TOC] 一、纯虚函数 1.纯虚函数的定义 ​ 纯虚函数,没有函数体,同时定义时在函数...

  • C++boolan part1_week3

    C++纯虚函数 一、定义 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方...

  • 2020-02-17-C++抽象类

    抽象类包含有纯虚函数 的类 称为 抽象类,一个抽象类 至少有一个纯虚函数,抽象类只能作为基类派生出 新的子类,...

网友评论

    本文标题:C++ 虚函数、纯虚函数、虚基类、抽象类

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