华为笔试题解析:C++与模板函数
需积分: 9 142 浏览量
更新于2024-08-02
1
收藏 73KB DOC 举报
"华为笔试涉及到的C++编程与模板知识"
在华为的笔试中,经常会遇到C++相关的题目,特别是涉及类的继承、虚函数以及模板的使用。以下是对给定部分内容的详细解释:
1. **类继承与虚函数**:
- 在这段代码中,`class A` 定义了三个`func`函数,其中两个是虚函数。`class B` 是 `class A` 的派生类,并重写了其中的函数。
- 在 `main` 函数中,`A *pA` 指向一个 `B` 对象 `b`。当调用 `pA->func(1)` 时,由于 `func(int data)` 是虚函数,所以实际调用了 `B` 类的实现,输出 `B2:1`。而 `pA->func("test")` 调用的是非虚拟的 `func(char* str)`,因此调用 `A` 类的实现,输出 `A3:(test)`。
- 对于常量指针 `const A* pcA`,调用 `pcA->func(2)` 时,`func(int data)` 是 const 虚函数,所以依然调用了 `B` 类的实现,输出 `A1:1` 和 `A2:2`。这里展示了常量指针如何影响虚函数的调用。
2. **模板函数与类型推断**:
- 这部分代码展示了模板函数在处理不同类型时的行为。首先,有两组模板函数 `func`,一组接受 `const int &t`,另一组接受 `const T &t`。
- 当调用 `func(10.3)` 时,因为 `double` 类型不能直接转换为 `const int &`,所以选择了模板函数 `void func(const T &t)`,输出 `10.3`。
- 而 `func(1000)` 直接匹配到 `const int &` 的非模板函数,输出 `1000`。
- 如果将非模板函数删除,对于 `func(10.3)`,编译器会尝试找到一个模板函数来匹配,此时选择 `void func(const T &t)`,同样输出 `10.3`;而对于 `func(1000)`,因为没有非模板函数,模板函数 `void func(const T &t)` 被用于整型,输出 `1000`。
3. **错误修复**:
- 给定的代码片段最后有一个错误的类定义,`klass` 的析构函数定义在 `private` 部分。这将导致无法在类外部直接调用析构函数,通常析构函数应为 `public`。正确的做法应该是将析构函数声明为 `public`,以便在需要时可以正确地销毁对象。
总结,华为笔试题主要考察对C++语言基础的深入理解,包括类的继承、虚函数的多态性、模板的类型推断以及访问控制等核心概念。准备这样的笔试时,需要熟练掌握这些知识点,并能灵活应用到具体问题中。
156 浏览量
395 浏览量
375 浏览量
2024-10-28 上传
102 浏览量
2024-10-28 上传
281 浏览量

dingrui37
- 粉丝: 0
最新资源
- Web远程教学系统需求分析指南
- 禅道6.2版本发布,优化测试流程,提高安全性
- Netty传输层API中文文档及资源包免费下载
- 超凡搜索:引领搜索领域的创新神器
- JavaWeb租房系统实现与代码参考指南
- 老冀文章编辑工具v1.8:文章编辑的自动化解决方案
- MovieLens 1m数据集深度解析:数据库设计与电影属性
- TypeScript实现tca-flip-coins模拟硬币翻转算法
- Directshow实现多路视频采集与传输技术
- 百度editor实现无限制附件上传功能
- C语言二级上机模拟题与VC6.0完整版
- A*算法解决八数码问题:AI领域的经典案例
- Android版SeetaFace JNI程序实现人脸检测与对齐
- 热交换器效率提升技术手册
- WinCE平台CPU占用率精确测试工具介绍
- JavaScript实现的压缩包子算法解读