虚函数和纯虚函数的区别

5 分钟阅读 773 字 + 482 词
参考答案
虚函数和纯虚函数都用于实现多态
  1. 虚函数
  • 虚函数是在普通函数之前加一个 virtual 关键字
  • 虚函数是在基类中声明的,并且可以在派生类中被重写
  • 虚函数可以有实现,也就是说,基类中的虚函数可以有一个定义,派生类可以选择提供自己的实现,也可以使用基类的实现。
  • 通过虚函数,可以在基类指针或引用中实现动态绑定,即在运行时确定调用哪个类中的函数实现。
  1. 纯虚函数
  • 纯虚函数是在虚函数后面加一个 =0
  • 纯虚函数也是在基类中声明的,但它没有实现,只有声明
  • 当一个类包含至少一个纯虚函数时,它就成为了一个抽象类,这意味着你不能实例化这样的类,但可以声明这种类型的指针或引用。
  1. 区别
  • 是否实现:
    • 虚函数提供函数声明和实现,即提供虚函数的默认实现
    • 纯虚函数没有函数具体实现,只提供函数声明。
  • 派生类是否实现
    • 派生类可以选择是否覆盖虚函数的默认实现。
    • 当一个类包含至少一个纯虚函数时,派生类必须提供具体实现,否则他们也变成抽象类。
  • 实例化:
    • 包含纯虚函数的类是抽象类,不能被实例化;
    • 而包含虚函数的类不一定是抽象类,可以被实例化,除非它也包含纯虚函数。
  • 目的:
    • 虚函数用于提供一个可以在派生类中被重写的方法实现;
    • 通过纯虚函数,抽象类提供一种接口规范,要求派生类必须提供具体实现。
  • 动态绑定:
    • 虚函数支持动态绑定,
    • 纯虚函数由于没有实现,它们本身不参与动态绑定,但可以作为接口的一部分,影响整个类的多态性。
总结:
虚函数和纯虚函数都用于实现多态 。虚函数是在普通函数之前加一个 virtual 关键字。 虚函数是在基类中声明的,并且可以在派生类中被重写 。通过虚函数,可以在基类指针或引用中实现动态绑定,即在运行时确定调用哪个类中的函数实现。而纯虚函数是在虚函数后面加一个 =0 纯虚函数也是在基类中声明的,但它没有实现,只有声明 当一个类包含至少一个纯虚函数时,它就成为了一个抽象类,这意味着你不能实例化这样的类,但可以声明这种类型的指针或引用。当一个类包含至少一个纯虚函数时,派生类必须提供具体实现,否则他们也变成抽象。通过纯虚函数,抽象类提供一种接口规范,要求派生类必须提供具体实现。