C++面试深度解析:static与const成员函数,及sizeof运算符
需积分: 10 137 浏览量
更新于2024-09-19
收藏 264KB PDF 举报
"C++、C_、C面试真题解析"
C++是一种强大的面向对象的编程语言,常常在面试中被用来评估候选人的技术能力。本文将深入探讨两个经典的C++面试问题及其解析。
问题一涉及到`static`和`const`关键字在类成员函数中的使用。在C++中,`static`修饰的成员函数属于类,而非类的任何实例,这意味着它们不依赖于`this`指针来访问类的数据。相反,`const`修饰的成员函数表明该函数不会修改类的非静态数据成员。然而,`const`成员函数内部仍然有一个隐含的`const this`指针,确保不会改变对象状态。由于`static`函数没有`this`指针,所以它与`const`的语义冲突,两者不能同时用于一个成员函数。这也就意味着在C++中,我们不能定义一个既`static`又`const`的成员函数。
问题二是一个关于类大小计算的问题。在C++中,`sizeof`运算符用于计算类型的大小,包括其所有成员的大小。在给定的代码中,有三个类:`A`,`B`和`C`。`A`是一个空类,理论上其大小应为0,但由于实现细节,如对齐要求或编译器的预留空间,Visual Studio 2008中每个空类实例占1个字节。`B`类增加了构造函数和析构函数,但这两种函数在对象实例中并不占用额外空间,因为它们的地址在运行时是已知的。所以`sizeof(B)`也是1。`C`类继承自`B`,并且其析构函数被声明为虚拟的。在C++中,拥有虚函数的类会有一个虚函数表指针(vptr),这个指针通常占用4个字节(在32位系统中)。因此,`C`类的大小是`B`类的大小加上这个vptr,即1+4=5字节。但在Visual Studio 2008中,由于对齐规则,即使总大小小于4字节,编译器也会将其填充到4字节的倍数,所以`sizeof(C)`是4。
这两个问题展示了C++中的关键概念,包括`static`和`const`的使用、类大小的计算以及虚函数的作用。理解这些概念对于编写高效且健壮的C++代码至关重要。在面试中,能够清楚地解释这些问题背后的原理和C++标准的规定,可以体现候选人对C++深入的理解和技术功底。
190 浏览量
2023-08-07 上传
2023-08-07 上传
129 浏览量
135 浏览量
2023-08-07 上传
2023-08-07 上传
2023-08-07 上传
2023-08-07 上传
wym476
- 粉丝: 1
- 资源: 4
最新资源
- 天涯部落版主工具 龙网天涯部落版主工具 v1.2
- rpyc:RPyC(远程Python调用)-用于python的透明和对称RPC库
- shopproject
- 欧美风格主机模板
- doodad:用于 docker、EC2、GCP 等的作业启动库
- 深度学习
- e_commerce-endpoint-rest:电子商务的宁静HATEOAS端点
- STM32 ST-LINK Utility v4.2.0 stlink升级固件.rar
- node-usb:改进的Node.js USB库
- 导出表格,及批量删除.zip
- 行业分类-设备装置-一种抗水防破抗氧化书画纸.zip
- QPD:量子囚徒的困境
- EnumSerialComs:使用 Windows 注册表信息来识别串行 COM 设备-matlab开发
- airmash-frontend:上次官方Airmash应用程序的“半原始”副本
- 服装店收银系统 七彩服装收银系统 v3.2 网络版
- Demo_image-video:托管的演示图像