海康威视 9.25 软件开发笔试:类与结构体、重载与重写
- 轮次
- 笔试
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 题型:单选、多选、问答、编程。
- 问答题:类和结构体有什么区别?
- 问答题:重载和重写有什么区别?
- 编程题:继承已有的长方形类,补全长方体体积的类和方法,输出体积。
- 编程题:输入一个数,判断是否是质数。
《参考解析》
**类和结构体在 C++ 里的区别:**语言层面唯一的硬差别是默认访问权限和默认继承权限——struct 的成员与继承默认 public,class 默认 private;除此之外两者完全等价,都可以有成员函数、构造析构、继承与虚函数,也都可以用来做模板参数。所以答完这句以后最好补上约定部分:struct 通常用于纯数据聚合(POD、跨接口传参),class 用于有封装不变量的类型,需要成员函数维护状态时用 class。顺带要能说出访问控制只在编译期生效,运行期没有任何保护。
**重载与重写的区别:**重载(overload)是同一作用域内同名但参数列表不同的多个函数,编译期按静态类型与实参个数/类型决议,与返回值无关。重写(override)是派生类重新实现基类的虚函数,签名必须一致(返回类型允许协变),运行期按对象动态类型分发,基类那个函数必须是 virtual。C++11 起的 override 关键字作用是让编译器校验「确实重写了」,签名写错会直接编译报错——这正是面试官爱问的点:没有 override 时,参数写错会变成隐藏而不是重写,程序静默走基类实现。另外还有「隐藏」这个概念:派生类的同名非虚函数会遮蔽基类同名重载集,要用 using 声明引入。
**继承 + 长方体体积:**题目要求继承长方形类,标准写法是让 Box 继承 Rectangle,加一个高度成员,再提供 getVolume() 返回 getArea() * height;如果要把面积做成多态接口,基类的 getArea() 声明为虚函数,并且基类析构函数也要 virtual(否则用基类指针 delete 派生对象会漏析构)。容易丢分的细节:成员初始化顺序按声明顺序而不是初始化列表书写顺序,高度为 0 或负数要不要校验,输出格式(是否保留小数、有没有换行)必须和题目样例完全一致。
**判断质数:**边界先写死:小于 2 的数一律不是质数(1 也不是),2 是质数。判定时只需要试除到平方根,循环条件写成 i * i <= n 可以避免开方和溢出;跳过偶数、从 3 开始步长 2 能再省一半;输入可能到 int 上限时注意 i * i 的溢出,必要时用 i <= n / i。如果面试官追问大数场景,答案方向是 Miller-Rabin 这类概率素性测试。这类题的失分点几乎都在边界与输入格式上:多组输入要循环读、负数与 0 要有兜底。
**这份笔试卷怎么拿分:**选择题多半考语言细节和计算机基础(指针与引用、虚函数、内存布局、网络与操作系统常识),遇到不确定的先排除明显错误项,别在一道题上耗太久。问答题按「定义一句 + 分条列区别 + 一个具体例子」三段式写,阅卷是按关键词给分的,把 public/private、编译期/运行期、参数列表/签名这些关键词写出来。编程题先保证样例通过、再做边界处理,写完回头检查输入输出格式和是否有多组数据——招聘笔试的评测多半是黑盒比对,格式错等于没做对。