基本信息
每一个类都有一个虚表,以及虚表指针; 虚表的内容是编译器决定的,虚表中用于存放虚函数的指针, 程序运行时的类型信息等;
每个多态对象都存放着一个指向当前类型的虚表的指针, 该指针在构造函数中被赋值, 一般来说当调用当前这个类的构造函数, 则虚表指针就指向当前类的虚表
虚继承
用于解决多重继承的过程中成员访问的二义性(菱形继承)
格式:class 类名 : virtual 继承方式 基类类名
注:在虚继承的过程中,编译器会为子类创建一个虚表,以及一个虚基表指针(占用对象空间)指向虚表(不占用对象空间)
例:
#include<iostream>
using namespace std;
class A{
private:
int a;
public:
A(){
cout<<"A()"<<endl;}
~A(){
cout<<"~A()"<<endl;}
};
class B:virtual public A{
private:
int b;
public:
B(){
cout<<"B()"<<endl;}
~B(){
cout<<"~B()"<<endl;}
};
class C:virtual public A{
private:
int c;
public:
C(){
cout<<"C()"<<endl;}
~C(){