【C/C++】C++ 中的虚函数和纯虚函数(virtual)

文章目录

  • Intro
  • 虚函数
  • 纯虚函数
  • Ref

Intro

面向对象的编程范式有三大特性

  • 封装
  • 继承
  • 多态

其中多态机制就是靠虚函数(virtual function)来实现的。所谓的多态,在代码层的表现就是:

  • 用父类型的指针指向其子类的实例,
  • 然后通过父类指针的来实际调用子类的成员函数

这种技术,可以让统一的父类的指针具有“多种形态”,故称为多态。这是一种泛型技术。所谓的泛型技术,就是试图使用不变的代码来实现可变的算法。比如模板技术,RTTI技术,这里说的虚函数技术,最终的函数状态,要么等到编译时决定,要么等到运行时决定。

虚函数

定义时候这样写

class Parent
{
	public:
		virtual void foo() {cout << "I am too old." << endl;}
}

class Child
{
	public:
		virtual void foo() {cout << "I am too yound." << endl;}
}

调用时候这样写,

Parent* p = new Child();
p->foo();

输出结果是

I am too yound.

在调用的时候,我们使用的是指向 Parent 类型的指针,调用的却是 Child 中的函数。

纯虚函数

virtual void foo () = 0;

纯虚函数带动整个类虚化,成为抽象类。均只有定义,无法实例化。必须有子类继承之后才能各自去做实例化。一般用来定义顶层的抽象类。如 Fruit 就可以定义为一个抽象类, Apple, Banana 可以定义为其的子类。


Ref

  • c++虚函数的使用方法:基本定义
  • C++虚函数 : 讲解非常细腻,足量实例代码
  • c++中的虚函数: 讲解透彻,图表生动,汇编精彩。把虚函数表讲透了
  • C++纯虚函数: 总结的非常好

你可能感兴趣的:(virtual,function,C/C++)