C++笔试题和面试题(下)——软件测试工程师面试秘籍(23)

发表于:2021-12-27 08:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:G.li    来源:51Testing软件测试网原创

  试题41.总结static的作用。
  答案:作用如下。
  (1)函数体内static变量的作用域为该函数体,不同于auto变量,该变量的内存只分配一次,因此在下次调用时其值仍维持上次的值。
  (2)在模块内的static全局变量可以被该模块内所有函数访问,但不能被该模块外其他函数访问。
  (3)在模块内的static函数只可被这一模块内的其他函数调用,该函数的使用范围被限制在声明它的模块内。
  (4)在类中的static成员变量属于整个类,对类的所有对象只有一份副本。
  (5)在类中的static成员函数属于整个类,该函数不接收this指针,因而只能访问类的static成员变量。

  试题42.总结const的作用。
  答案:作用如下。
  (1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后没有机会再改变它。
  (2)对于指针来说,可以指定指针本身为const类型,也可以指定指针所指的数据为const类型,或将二者同时指定为const类型。
  (3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值。
  (4)对于类的成员函数,若指定它为const类型,则表明它是一个常函数,不能修改类的成员变量。
  (5)对于类的成员函数,有时必须指定其返回值为const类型,以使得其返回值不为“左值”。

  试题43.请说明函数指针和指针函数的区别。
  答案:函数指针是指向一个函数入口的指针,指针函数是指函数的返回值为指针类型。

  试题44.局部变量和全局变量是否可以同名?
  答案:可以。局部变量会屏蔽全局变量。要用全局变量,需要使用“::”(域运算符)。

  试题45.类的声明和实现分开的好处是什么?
  答案:(1)具有保护作用。
  (2)可以提高编译效率。

  试题46.什么是消息映射?
  答案:消息映射就是让程序员指定MFC类(有消息处理能力的类)处理某个消息,然后由程序员完成对该处理函数的编写,以实现消息处理功能。

  试题47.哪几种情况下必须用到初始化成员列表?
  答案:初始化常量成员;成员类型是没有无参构造函数的类;初始化引用类型的成员。

  试题48.什么是常对象?
  答案:常对象是指在任何场合都不能对其成员的值进行修改的对象。

  试题49.静态函数存在的意义是什么?
  答案:静态私有成员在类外不能访问,可通过类的静态成员函数来访问。
  当类的构造函数是私有的时候,它不能像普通类那样实例化自己,只能通过静态成员函数来调用构造函数。

  试题50.什么是抽象类?
  答案:抽象类指不用来定义对象,而只作为一种基本类型用于继承的类。

  试题51.不允许重载的5个运算符是什么?
  答案:(1)*(成员指针访问运算符)。
  (2)::(域运算符)。
  (3)sizeof(长度运算符)。
  (4)?:(条件运算符)。
  (5).(成员访问符)。

  试题52.赋值运算符和复制构造函数的相同点与不同点是什么?
  答案:相同点是二者都将一个对象复制到另一个对象中。
  不同点是复制构造函数要新建一个对象。

  试题53.函数重载是什么意思?它与虚函数的概念有什么区别?
  答案:函数重载是指一个同名函数可完成不同的功能,编译系统在编译阶段通过函数不同的参数个数、参数类型、函数的返回值来判断该调用哪一个函数,即实现的是静态的多态性。但是记住,不能仅通过函数的返回值不同来实现函数重载。在基类中通过使用关键字virtual来声明一个函数为虚函数,虚函数的功能可能在将来的派生类中定义或者在基类的基础之上进行扩展,系统只能在运行阶段动态决定该调用哪一个函数,所以实现的是动态的多态性。虚函数体现的是纵向的概念,即在基类和派生类间实现。

  试题54.构造函数和析构函数是否可以重载?为什么?
  答案:构造函数可以重载,析构函数不可以重载。因为构造函数可以有多个且可以带参数,而析构函数只能有一个且不能带参数。

  试题55.delete与?delete []的区别是什么?
  答案:delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。

  试题56.请说出类中private、protected、public这3种访问权限的区别。
  答案:private是私有类型,只有本类中的成员函数可以访问;protected是受保护的类型,本类和继承类中的成员函数可以访问;public是公有类型,任何类中的成员函数都可以访问。

  试题57.虚拟函数与普通成员函数的区别是什么?内联函数和构造函数能否为虚拟函数?
  答案:虚拟函数有virtual关键字,有虚拟指针和虚函数表,虚拟指针就是虚拟函数的接口,而普通成员函数没有。内联函数和构造函数不能为虚拟函数。

  试题58.通过代码说明指针数组和数组指针(指向数组的指针)的区别。
  答案:
char *q[]={"xxx","xxx","xxx"};  //指针数组,q[0]为一个指针
char (*p)[]=a;                  //数组指针,p[0]为一个变量

  试题59.C和C++中的struct有什么不同?
  答案:C和C++中struct的主要区别是C中的struct定义的数据结构不可以有成员函数,而C++中的struct定义的数据结构可以有。

  试题60.数组和链表的区别是什么?
  答案:数组的数据顺序存储,数组的大小固定;链表的数据随机存储,链表的大小可动态改变。

查看《软件测试工程师面试秘籍》全部连载章节
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号