纯虚函数

定义

纯虚函数就是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义本身的实现方法。在基类中实现纯虚函数的方法是在函数原型后面加“=0”函数

引入缘由

  • 方便的使用多态,所以经常在基类中定义虚函数
  • 在不少状况下,基类自己生成对象是不合理的。例如,动物做为一个基类能够派生出老虎、孔雀等子类,蛋动物自己生成对象明显不合常理。

为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(virtual ReturnType Function() = 0),则编译器要求在派生类中必须予以重写以实现多态性。
含有纯虚函数的类称为抽象类,它不能生成对象。
声明了纯虚函数的类是一个抽象类,因此,用户不能建立类的实例,只能建立它的派生类的实例。
纯虚函数最显著的特征是:它们必须在继承类总从新声明函数(不要后面的=0,不然该派生类也不鞥实例化),并且它们在抽象类中每每没有定义。
定义纯虚函数的目的在于,使派生类仅仅只是继承函数的接口。
纯虚函数的意义在于,让全部的类对象(主要是派生类对象)均可以执行纯虚函数的动做,但类没法为纯虚函数提供一个合理的缺省实现。因此,纯虚函数的声明就是在告诉子类的设计者,“你必须提供一个纯虚函数的实现,但我不知道你会怎样实现它”
抽象类的介绍设计

抽象类是一种特殊的类,它是为了抽象和设计的目的而创建的,它处于继承层次结构的较上层。
抽象类的定义:
称带有纯虚函数的类为抽象类
抽象类的做用
抽象类的主要做用是将有关的操做做为结果接口组织在一个继承层次结构中,由它来为派生类提供一个公共的根,派生类将具体实如今其基类中做为借口的操做。
因此派生类实际上刻画了一组子类的操做接口的通用语义,这些语义也传给子类,子类能够具体实现这些语义,也能够再将这些语义传给本身的子类。指针

使用抽象类时注意:对象

  • 抽象类只能做为基类来使用,其纯虚函数的实现由派生类给出。若是派生类中没有从新定义纯虚函数,而只是继承基类的纯虚函数,则这个派生类仍然是一个抽象类。若是派生类中给出了基类纯虚函数的实现,则该派生类就再也不是抽象类了,它是一个能够创建对象的具体的类。
  • 抽象类是不能定义对象的。

纯虚函数和虚函数有什么区别

  • 纯虚函数声明以下:virtual void function1()=0;
    纯虚函数必定没有定义,纯虚函数用来规范派生类的行为, 即接口。包含纯虚函数的类是抽象类,抽象类不能定义实例,但能够声明指向实现该抽象类的具体类的指针或引用。
  • 虚函数的声明以下:virtual void function(parameter);
    虚函数必须实现,若是不实现,编译器将报错。
  • 对于虚函数来讲,父类和子类都有各自的版本。由多态方式调用的时候动态绑定。
  • 实现了纯虚函数的子类,该纯虚函数在子类中就变成了了虚函数,子类的子类能够覆盖该虚函数,由多态方式调用的时候动态绑定。
  • 虚函数是C++中用于实现多态的机制。核心理念就是经过基类访问派生类定义的函数。
  • 在有动态分配堆上内存的时候,析构函数必须是虚函数,但没有必要是纯虚的。
  • 友元不是成员函数,只有成员函数才可使虚拟的,所以友元不能是虚拟函数。但能够经过让友元函数调用虚拟成员函数来解决友元的虚拟问题。
  • 析构函数应当是虚函数,将调用相应对象类型的析构函数。所以,若是指针指向的是子类对象,将调用子类的析构函数,而后自动调用基类的析构函数。
相关文章
相关标签/搜索