34_override、final、内存结构、名称粉碎

Override、final

概念

    1. 重载:同名作用域相同
    2. 隐藏:同名作用域不同,继承
    3. 覆盖:派生类重写了基类的虚表,override声明构成覆盖
    4. final写在类名后表示不能被继承 //class X final

Class A

{

Public:

Void fun1()

{

}

Void fun1(int)

{

}

Virtual void fun2() final //加上final不让派生类覆盖

{

}

}

Class B : public A

{

Public:

Void fun1()

{

}

Virtual void fun2(int)

{

}

Virtual void fun2()

{

}

}

内存结构

    1. 单独一个类

    1. 单独一个类有虚函数

    1. 单重继承

    1. 单重继承有虚函数

    1. 单重虚继承

0x416b30为偏移表,里面存放了虚基类距离虚基类数据的位置

    1. 单重虚继承虚函数

有增加虚函数的情况下首地址为派生类的虚表,没有增加则为基类的偏离表。

中间多的4字节为分割线

0x416b40为虚基类距离虚基类数据的位置

0x416b3c 为子类虚表

    1. 多重继承

    1. 多重继承虚函数

0x418b4c为被C覆盖的A的虚表位置

0X418b58为被C覆盖的B的虚表位置

    1. 多重虚继承

0x418b30为虚基类A偏移表

    1. 多重虚继承有虚函数

0x418b50为虚基类偏移表

0x418b44为c覆盖的虚基类A的虚表

0x418b4c为c覆盖的虚基类B的虚表

名称粉碎

    1. ?表全局作用域fun函数名@@调用约定参数
0 条评论
发表一条评论