C++面试笔记:构造函数、虚函数与内存布局

需积分: 9 0 下载量 170 浏览量 更新于2024-09-08 收藏 390KB DOCX 举报
本篇学习笔记主要围绕C++面试中常见的概念展开,涵盖了构造函数、虚函数、虚继承以及内存布局和复制等方面的知识。首先,我们讨论了`extern char p[]`和`extern char a[100]`的区别,它们都表示指针,但`p`指向的是一个固定大小的数组,而`a`则是一个动态数组,通常用于处理字符数组。其次,重点提到了虚拟地址空间,这部分在处理空指针异常和小整型指针引用时至关重要。 关于重载和重写,C++中不仅限于同一类内的函数定义,子类可以重载基类的同名函数,只要参数列表不同就算重载,而当子类函数参数类型范围小于基类时,这种情况会导致函数重写。接着,讲解了C++的三种拷贝构造函数的使用场景,包括作为函数参数值传递、函数返回值的拷贝以及对象初始化。 浅拷贝的概念在此也有所提及,它只复制对象的数据成员,但对于存在动态成员的对象,浅拷贝可能导致问题。为了防止按值传递带来的问题,可以使用私有拷贝构造函数。接下来,内容转向内存对齐,特别是涉及虚基类指针和虚函数表指针时,类对象的内存布局会根据这些元素进行调整。在虚继承和普通继承结合的情况下,内存布局顺序为实基类、虚基类指针、派生类自身成员。 具体到对象的内存布局,当B和C都虚继承A,并且D继承自BC时,内存分配会包含来自B和C的虚指针,各自的公有成员,以及D自身的公有成员和继承自A的成员。虚函数表指针记录了虚函数的信息,以及子类对象相对于自己的位置。最后,笔记总结了重写、重载和隐藏的概念,强调了派生类如何通过虚函数重写基类的函数,以及如何通过实函数重载或隐藏基类的行为。 这篇笔记深入浅出地解释了C++中的核心概念,对于准备C++面试者来说,提供了丰富的理论和实例支持。