C++温故而知新(二)

在初步了解到前面的关于类的第一个函数构造函数之后。关于构造函数的权限和使用方法,作用之后,在这里接下来研究C++的第二个特色

那就是虚函数,研究虚函数的作用、内存中分分配状态、继承、安全性等一系列的问题,我们将这些问题一个一个分解开来

1.虚函数作用

   C++中加入虚函数,是由于多态泛型变成的考虑,函数的重载和虚函数是实现多态的主要途径,实现晚绑定机制,在编译的时候不知道会调用哪个

  直到运行的时候才加载正确的地址

2.含有虚函数类的内存大小和位置

    如果有虚表指针,那么地址应该和对象地址是一致的 

    如果有虚函数:内存大小=成员变量内存大小+padding大小+虚表个数*4字节(pS:如果从两个类继承,父类中都有虚函数,那么就有2个虚表指针,子类中的虚函数放在第一个表中)

     想想前面的构造函数的功能,其中也包括创建虚表指针 VPTR VTBL

     如果没有虚函数:内存大小=成员变量内存大小+padding大小

3.虚函数的安全性

     谈到这个问题,父类的指针对象一般不能访问子类的没有覆盖的虚函数,但是通过虚表这种机制,又是赤裸裸的将子类的虚函数给拿到手了,这是由背与C++语法的

4.虚函数的缺点

    暂用额外内存和运行时间

详细参考

http://blog.csdn.net/haoel/article/details/1948051

http://blog.csdn.net/hackbuteer1/article/details/7883531

原文地址:https://www.cnblogs.com/OneDream/p/3367919.html