多态性:简单概括“一个接口,多种方法”
目的:接口重用,自适应调用实现方法
分为:
编译时多态(静态多态):重载函数
运行时多态(动态多态):虚函数实现
重写有两种,直接重写成员函数和重写虚函数,只有重写了虚函数的才能算作是体现了C++多态性。
注:覆盖也称重写
编译器实现:
当类中声明虚函数时,编译器会在类中生成一个虚函数表:
(1)虚函数表是一个存储类成员函数指针的数据结构,它是一个类中所有虚成员函数的集合;
(2)虚函数表是由编译器自动生成与维护的;
(3)virtual成员函数会被编译器放入虚函数表中;
(4)存在虚函数时,每个对象中都包含一个指向虚函数表的指针变量(vptr指针),这个指针变量在类成员变量中是隐藏的;
需要特别注意的是:
(1)vptr指针不会继承,也就是说子类不会继承父类的vptr指针,子类和父类分别拥有各自的vptr指针;
(2)指向父类对象的指针的步长一般和指向子类对象的指针的步长是不一样的。因为子类继承父类的基础上也可以有自己的属性,所以子类对象所占用的存储空间和父类可能不一样。
版权声明:本文为biuobiu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。