一套编程题 问答题41-60

41. 类成员函数的重载、覆盖和隐藏的区别?

① 成员函数被重载的特征:

(1)相同的范围(在同一个类中);

(2)函数名字相同;

(3)参数不同;

(4)virtual 关键字可有可无。

② 覆盖是指派生类函数覆盖基类函数,特征是:

(1)不同的范围(分别位于派生类与基类);

(2)函数名字相同;

(3)参数相同;

(4)基类函数必须有virtual 关键字。

③ “隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

 

42. 堆栈溢出一般是由什么原因导致的?

① 没有回收垃圾资源

② 层次太深的递归调用

 

43. C++中的空类,默认产生的类成员函数:

class

{

  public:

    Empty();                         // 缺省构造函数

    Empty(const Empty&);             // 拷贝构造函数

    ~Empty();                        // 析构函数

    Empty& operator=(const Empty&);  // 赋值运算符

    Empty* operator&();              // 取值运算符

    const Empty* operator&() const;  // 取值运算符const

};

 

44. 进程间通信的方式有?

进程间通信的方式有 :共享内存, 管道(有名管道/无名管道),Socket ,消息队列 ,信号,信号量,内存映射等。

 

45. 进程死锁的原因?

    资源竞争及进程推进顺序非法。

 

46. 死锁的四个必要条件?

     互斥,请求保持,不可剥夺,环路。

 

47. 类的静态成员和非静态成员有什么区别?

类的静态成员每个类只有一个,即是属于本类的;类的非静态成员每个对象都有一份。

 

48. 什么是浅拷贝?什么是深拷贝?

浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个

对象的改动都会影响另外一个对象。

深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。

一般来说,浅拷贝就是复制那个对象的指针。深拷贝就是复制了那个对象。

补充问题:

临时对象:临时对象的开销比局部对象小些

 

49. 那些情况需要调用拷贝构造函数,请举例?

      a.一个对象以值传递的方式传入函数体

      b.一个对象以值传递的方式从函数返回

      c.一个对象需要通过另一个对象进行初始化

 

50. C和C++有什么不同?

① 从机制上:c是面向过程的(但c也可以编写面向对象的程序);c++是面向对象的,提供了类。但是,c++编写面向对象的程序比c容易

② 从适用的方向:c适合要求代码体积小的,效率高的场合,如嵌入式;c++适合更上层的,复杂的;linux核心大部分是c写的,因为它是系统软件,效率要求极高。

③ C语言是结构化编程语言,C++是面向对象编程语言。C++侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。

 

51. C++中virtual与inline的含义分别是什么?
  在基类成员函数的声明前加上virtual关键字,意味着将该成员函数声明为虚函数。

 inline与函数的定义体放在一起,使该函数称为内联。inline是一种用于实现的关键字,而不是用于声明的关键字。

虚函数的特点;如果希望派生类能够重新定义基类的方法,则在基类中将该方法定义为虚方法,这样可以启用动态联编。

内联函数的特点;使用内联函数的目的是为了提高函数的运行效率。内联函数体的代码不能过长,因为内联函数省去调用函数的时间是以代码膨胀为代价的。内联函数不能包含循环语句,因为执行循环语句要比调用函数的开销大。

一个函数能否即是虚函数又是内联函数?

可以,建议不使用?

 

52. 数组和链表的区别?

数组的数据是顺序存储的,存储大小固定。

链表的数据可以随机存储,存储大小可以动态的改变。

 

53. C++容器的分类及各自的特性?

C++容器分为顺序容器和关联容器。二者的本质区别在于:关联容器通过键(key) 存储和读取元素,而顺序容器的元素排列次序与元素值无关,是由元素添加到容器的顺序决定的,通过元素在容器中的位置顺序存储和读取元素。

标准库定义了三种顺序容器类型,包括:vector、list、deque。

容器内的元素类型必须至少满足2个条件:可复制和可赋值。

vector是连续存储的,能支持快速随机访问,list不需要连续存储,能在中间快速插入和删除,deque是双端队列,具有后进先出的特性。

所有的迭代器范围都是左闭合区间,  [begin,end)  包括begin,但不包括end

 list迭代器不支持算术运算,不支持关系运算,也没有下标操作,只有最简单的自增 自减 相等 不等 运算。

标准库还提供了三种容器适配器:后进先出的stack、先进先出的queue和有优先级管理的priority_queue。stack可以建立在vector、list、deque上,queue要能提供push_front操作,不能建立在vector上,priority_queue要求提供随机访问能力,只能建立在vector或deque上。

标准库提供的关联容器有map、set、multimap和multiset。

map存储键值对,set存储单个键,multimap和multiset支持同一个键多次出现。

set与map不同的地方在于:set仅有key_type类型,它的value_type 也就是key_type;而且set不提供下标操作。map支持下标操作,而且与下标访问数组或者vector的行为截然不同:用下标访问不存在的元素将导致在map容器中添加一个新元素。

 

54. windows应用程序的类型?

控制台程序、窗口程序、库程序(静态/动态)

 

55. 窗口程序的创建过程?

a.定义WinMain入口函数  b. 定义窗口处理函数 WindowProc 

c. 注册窗口类RegisterClass  d. 创建窗口CreateWindow

e. 显示窗口ShowWindow/UpdateWindow

 f. 消息循环GetMessage

            TranslateMessage

            DisptachMessage

g. 消息处理

 

56. win32程序的执行机制?

Win32窗口程序是采用 事件驱动 方式执行,也就是 消息机制。

(程序的执行机制分为 过程驱动和事件驱动)

 

57. 列举win32中与消息相关的几个函数?

GetMessage - 获取消息

TranslateMessage - 翻译消息。将按键消息,翻译成字符消息

DispatchMessage - 派发消息。将消息派发到该消息所属窗口的窗口处理函数上。

 

58. 列举几个常用的窗口消息?

    WM_DESTROY、WM_SYSCOMMAND、WM_CREATE、WM_SIZE、WM_QUIT、WM_PAINT等。

 

59. Windows中消息可以分为几类?

    系统消息——由系统定义好的消息,可以在程序中直接使用。

    用户自定义消息——由用户自己定义,满足用户自己的需求。由用户自己发出消息,并响应处理

    应用程序消息——程序之间通讯时使用的消息。

    系统注册消息——在系统注册并生成相应消息,然后可以在各个程序中使用这个消息。

 

60. 消息队列的类型?

    系统消息队列——由系统维护的消息队列。存放系统产生的消息,例如鼠标、键盘等。

程序消息队列——属于每一个应用程序(线程)的消息队列。由应用程序(线程)维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值