资源描述
重要面试是c/c++软件工程师,但愿对人们有所协助。
一 C语言某些
1、 问:在嵌入式开发中,为什么能通过C语言去直接操作硬件?
答:由于有指针,指针是C语言灵魂,她可以直接访内存。
2、 问:链表作用?
答:用于内存管理,链表节点中指针域可以将不持续内存彼此关联起来,从而实现内存动态管理。
3、 问:什么变量不能用指针指向?
答:寄存器变量(register修饰),由于这个变量会优先选取存储到CPU寄存器中,而指针只能指向内存任务区域,但不能指向寄存器。
4、 问:有符号字符型和无符号字符型变量最大值和最小值分别是多少(十六进制多少),为什么?
答:有符号(-128——127,-0x80——0x7F);无符号(0——255,0——0xFF)
5、局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。
6、全局变量和局部变量区别。
全局变量,储存在静态区.进入main函数之前就被创立.生命周期为整个源程序。
局部变量,在栈中分派.在函数被调用时才被创立.生命周期为函数内.
7、头文献中 ifndef/define/endif 干什么用?
防止重复包括
8、#include <filename.h> 和 #include “filename.h” 有什么区别?
#include <filename.h> :<> 告诉预解决器在原则系统目录中寻找文献。
#include “filename.h” :""告诉预解决器先在当前目录中寻找文献,找不到则再在
原则目录下寻找文献。
9、const 有什么用途?(请至少阐明两种)
(1)定义const常量
(2)const 可以修饰函数参数、返回值,甚至函数定义体。
被const 修饰东西都受到强制保护,可以防止意外变动,能提高程序健壮性。
//指向常整形数指针变量
const char* p1 = name;//指针所指向内容不能变,指针指向地址可变。const char *p; //和char const *p
//指向整形数常指针
char* const p2 = name;//地址不可变,内容可变。
//指向常量常指针
const char *const name="chen";//地址不变,内容不变。
10.数组与链表区别。
数组中数据在内存是顺序存储,插入需要移动诸多值。
由于链表是随机存储,链表访问需要遍历。
11 、内存分派:
1、栈区(stack)― 由编译器自动分派释放 ,存储函数参数值,局部变量值等。其操作方式类似于数据构造中栈。
2、堆区(heap) ― 普通由程序员分派释放, 若程序员不释放,程序结束时也许由OS回收 。注意它与数据构造中堆是两回事,分派方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)——全局变量和静态变量存储是放在一块,初始化全局变量和静态变量在一块区域, 未初始化全局变量和未初始化静态变量在相邻另一块区域。 - 程序结束后有系统释放
4、文字常量区 ―常量字符串就是放在这里。 程序结束后由系统释放
5、程序代码区― 存储函数体二进制代码。
12、sizeof和strlen()区别
参照答案:
① sizeof是运算符,计算数据所占内存空间;strlen()是一种函数,计算字符数组字符数;
② sizeof可以用类型作参数;strlen()只能用char*作参数,必要是以’/0’结束
③ 数组做sizeof参数不退化,传递给strlen就退化为指针了;
④ sizeof操作符成果类型是size_t,它在头文献中typedef为unsigned int类型。该类型保证能容纳实现建立最大对象字节大小
13、 在C++ 程序中调用被C 编译器编译后函数,为什么要加extern“C”?
答:c++可以重载,c语言不可以被重载,c++函数提供了c语言连接互换指定函数extern“c”来解决名字问题。
14.头文献作用是什么?
答:1.通过头文献调用库
2、实现安全检查
15、 头文献中ifndef/define/endif作用?
答:防止头文献被重复引用。
16、 如果一种HEADER头文献要被各种源文献同步#include, 如何避免对HEADER中变量重复定义?
答:在某个源文献中对变量定义,在HEADER中仅对变量进行声明,即前面加 extern;
16、分别写出BOOL,int,float,指针类型变量a 与“零”比较语句。
答:BOOL :if ( !a ) or if(a)
int :if ( a ==0)or(a!=0)
float :const EPSSION 0.000001
if(X>=-EPSSION)&&(X<=EPSSION)
pointer :if ( a != NULL) or if(a == NULL)
17、const与#define相比有何长处
· const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而#define 只作简朴字符串替代,无类型安全检查。
· const检查定类型,如 const float pi = 3.,实际pi是3.141593,由于float类型有效位限制。
· const在编译时分派存储空间;而#define在预编译时编译,不分派存储空间。
· 有些集成化调试工具可以对const进行调试,但不能对宏进行调试。
18.简述数组与指针区别?
数组要么在静态存储区被创立(全局数组),要么在栈上被创立。
指针可以随时指向任意类型内存块。
19.变量声明和定义有什么区别?
答:声明变量不分派空间,定义变量要分派空间。声明重要是告诉编译器,背面引用都按声明格式。定义其实包括了声明意思,同步要分派内存空间。
20. 解释堆和栈区别。
答:堆(heap)——普通由程序员分派释放,若程序员不释放,程序结束时也许由OS回收。
栈(stack)——由编译器自动分派释放,存储函数参数值,局部变量值等。其操作方式类似于数据构造中栈。由系统自动分派,速度较快。但程序员是无法控制。
注意它与数据构造中堆是两回事,分派方式倒是类似于链表。速度比较慢,并且容易产生内存碎片,但是用起来最以便。
21、一种指针可以是volatile吗?
可以,由于指针和普通变量同样,有时也有变化程序不可控性。常用例子:
子中断服务子程序修改一种指向buff指针时,必要用volatile
22、内存分派方式分派方式有几种?
答:
1)从静态存储区域分派。内存在程序编译时候就已经分派好,这块内存在程序整个运营期间都存在。例如全局变量。
2)在栈上创立。在执行函数时,函数内局部变量存储单元都可以在栈上创立,函数执行结束时这些存储单元自动被释放。栈内存分派运算 内置于解决器指令集中,效率很高,但是分派内存容量有限。
3)从堆上分派,亦称动态内存分派。程序在运营时候用malloc或new申请任意多少内存,程序员自己负责在何时用free或delete释放内存。动态内存生存期由咱们决定,使用非常灵活,但问题也最多。
23、.函数模板与类模板有什么区别?
答:函数模板实例化是由编译程序在解决函数调用时自动完毕,而类模板实例化必要由程序员在程序中显式地指定。
24. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
答:while(1){};
loop:
goto loop;
25、核心字static作用是什么?((1)用于全局变量;(2)用于局部变量;(3)用于函数)
在C语言中,核心字static有三个明显作用:
static全局变量只初使化一次,防止在其她文献单元中被引用;
static局部变量只被初始化一次,下一次根据上一次成果值;
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝;
26、什么是预编译,何时需要预编译:
1、总是使用不经常改动大型代码体。
2、程序由各种模块构成,所有模块都使用一组原则包括文献和相似编译选项。
在这种状况下,可以将所有包括文献预编译为一种预编译头。
27、 构造与联合有和区别?
1. 构造和联合都是由各种不同数据类型成员构成,但在任何同一时刻,联合中只存储了一种被选中成员(所有成员共用一块地址空间),而
构造所有成员都存在(不同成员存储地址不同)。
2. 对于联合不同成员赋值,将会对其他成员重写,本来成员值就不存在了,而对于构造不同成员赋值是互不影响。
28、简述什么是值传递,什么是地址传递,两者区别是什么?
参照答案:
值传递主调函数传递给被调函数是值拷贝,不是原值;
地址传递主调函数传递给被调函数是值地址。
区别是值传递被调函数中操作不变化主调函数值,而地址传递则不同。
30、 比较 union 和 struct 不同;
在分派空间时,union中各个域空间是重叠,struct中各个域空间是不重叠。
31、 操作系统内存分派普通有哪几种方式,各有什么优缺陷?
定长和变长。
变长:内存时比较灵活,但是易产生内存碎片。
定长:灵活性差,但分派效率较高,不会产生内存碎片。
32、 操作系统致命错误有哪些?
致命错误重要涉及启动配备错、内部资源耗尽和各种其他类型不可恢复性错误。
32、 核心字volatile在编译时有什么含义?并给出三个不同使用场景例子(可以伪代码或者文字描述)。
用volatile核心字定义变量,相称于告诉编译器,这个变量值会随时发生变化,每次使用时都需要去内存里重新读取它值,并不要随意针对它作优化。
建议使用volatile变量场合:
(1) 并行设备硬件寄存器
(2) 一种中断服务子程序中会访问到非自动变量(全局变量)
(3) 多线程应用中被几种任务共享变量
33) 中断(interrupt,如键盘中断)与异常(exception,如除零异常)有何区别?
异常:解决器遇到编程失误,特殊状况时,必要内核解决(cpu时钟同步执行)
中断:外部硬件产生一种电信号,打断cpu执行。
34.malloc与calloc
malloc:直接申请空间,并不变化内存内容
calloc:把内存区域空间写0;
realloc:重新申请空间。
35、操作系统致命错误有哪些?
致命错误重要涉及启动配备错、内部资源耗尽和各种其他类型不可恢复性错误。
36、程序局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。
二 系统编程
1、问:什么是程序?什么是进程?本质区别?
答:程序是某些指令有序集合
进程是程序执行过程。
本质区别:程序是静态,进程是动态。
2、问:无名管道为什么只能在具备公共祖先进程间通信?管道特点?
答:管道无法打开,只可以通过继承办法获取文献描述符。
管道特点:
1.半双工特性,一种时间只能一种方向流通。
2.只在父子之间使用。
3.管道对于管道两端而言,只是一种文献,但是存储在内存中。
4.数据从管道一端写入,从另一端读出。
5.没有名字。
6.管道缓冲区是有限。
7.管道所传送数据是无格式,这规定管道读出方与写入方必要事先商定好数据格式,如多少字节算一种消息等。
8.写入管道数据读完之后就从管道中消失。
3、问:管道与消息队列区别?
答:管道和无名管道收发数据都是先进先出,消息队列可以实现按消息类型随机读取。
5、问:有名管道相比无名管道最大长处是什么?
答:实现不同信号之间互相通信。
6、问:什么是信号量,有什么特点,简述pv操作?
答:信号量就是个计数器,计数器值只能是非负。
操作计数器办法是pv操作,pv操作具备原子性(不可中断),要执行就一定要执行成功,要么就不执行。
P操作使信号量值减一。
当进行带阻塞p操作时候,如果信号量值已经是0了,p操作就会阻塞。
V操作使得信号量值加一。
7.死锁四个条件及解决办法。
(进程死锁因素:资源竞争及进程推动顺序非法)
(1)互斥条件:一种资源每次只能被一种进程使用。
(2) 祈求与保持条件:一种进程因祈求资源而阻塞时,对已获得资源保持不放。
(3)不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。
(4)循环等待条件:若干进程之间形成一种头尾相接循环等待资源关系。
解决死锁办法分为死锁防止,避免,检测与恢复四种
8、问:什么是进程?什么是线程,它们之间关系?实现多任务优缺陷?
答: 进程是系统资源分派基本单位,拥有独立资源分派。
线程是cpu调度和分派基本单位。
关系:
1:一种进程中可以有各种线程,线程必要依赖于进程存在,如果进程结束了,线程也就不存在了。
2:每个进程都至少有一种线程,称为主线程。
多任务优缺陷:
进程:
长处:父子进程资源独享。
缺陷:资源开销比较大,子进程完全复制父进程地址空间,父子进程共享数据不以便。
线程:
长处:资源开销比较小,共享数据比较方
缺陷:资源共享,各种线程共享资源比较麻烦。
11、. 什么是“zombie”进程?在咱们程序中如何防止“zombie”进程?(试说出其中三种办法)
僵尸进程:一种已经终结,但其父进程没有对其进行解决子进程称为僵尸进程。
防止僵尸进程:
1) 用waitpid(wait)等待子进程返回.
2)两次fork也可以实现
12、系统调用与库函数关系:
并不是所有系统调用都被封装成库函数,系统提供许多功能都必要通过系统调用才干完毕。
10.进程同步机制,并比较优缺陷。
进程同步是进程之间直接互相作用
进程互斥是进程之间发生一种间接性作用,普通是程序不但愿。
11、原则I/O提供三种类型缓冲:
全缓冲、行缓冲、不带缓冲
12、linux内核有几种锁,它们有什么 不同?
Linux内核锁重要是自旋锁和信号量。
自旋锁最多只能被一种可执行线程持有,如果一种执行线程试图祈求一种已被争用(已经被持有)自旋锁,那么这个线程就会始终进行忙循环——旋转——等待锁重新可用。要是锁未被争用,祈求它执行线程便能立即得到它并且继续进行。自旋锁可以在任何时刻防止多于一种执行线程同步进入临界区。
Linux中信号量是一种睡眠锁。如果有一种任务试图获得一种已被持有信号量时,信号量会将其推入等待队列,然后让其睡眠。这时解决器获得自由去执行其他代码。当持有信号量进程将信号量释放后,在等待队列中一种任务将被唤醒,从而便可以获得这个信号量。
信号量睡眠特性,使得信号量合用于锁会被长时间持有状况;只能在进程上下文中使用,由于中断上下文中是不能被调度;此外当代码持有信号量时,不可以再持有自旋锁。
13、请阐明C++中动态链接库和静态链接库区别?
答:
a) 动态链接是指在生成可执行文献时不将所有程序用到函数链接到一种文献,当程序运营时直接从操作系统中找,动态链接是只建立一种引用接口,而真正代码和数据存储在此外可执行模块中,在运营时再装入;
b) 静态链接就是把所有用到函数所有链接到exe文献中,所有代码和数据都复制到本模块中,运营时就不再需要库了。
14、请阐明调用动态链接库DLL2种方式?
答:
a) 载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得她们就像本地函数同样。这需要链接时链接那些函数所在DLL导入库,导入库向系统提供了载入DLL时所需信息及DLL函数定位。
b) 运营时动态链接(run-time dynamic linking),运营时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用 GetProcAddress获取DLL函数出口地址,然后就可以通过返回函数指针调用DLL函数了。如此即可避免导入库文献了。
15、 请阐明在程序中使用线程好处是什么?
答:
a) 耗时操作使用线程,提高应用程序响应
b) 并行操作时使用线程,如C/S架构服务器端并发线程响应顾客祈求。
c) 多CPU系统中,使用线程提高CPU运用率
d) 改进程序构造。一种既长又复杂进程可以考虑分为各种线程,成为几种独立或半独立运营某些,这样程序会利于理解和修改。
16、顾客进程间通信重要哪几种方式?
(1)管道(Pipe):管道可用于具备亲缘关系进程间通信,容许一种进程和另一种与它有共同祖先进程之间进行通信。
(2)命名管道(named pipe):命名管道克服了管道没有名字限制,因而,除具备管道所具备功能外,它还容许无亲缘关系进程间通信。命名管道在文献系统中有相应文献名。命名管道通过命令mkfifo或系统调用mkfifo来创立。
(3)信号(Signal):pv操作控制信号,实现信号同步互斥。
(4)消息(Message)队列:消息队列是消息链接表,涉及Posix消息队列system V消息队列。有足够权限进程可以向队列中添加消息,被赋予读权限进程则可以读走队列中消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺
(5)共享内存:使得各种进程可以访问同一块内存空间,是最快可用IPC形式。是针对其她通信机制运营效率较低而设计。往往与其他通信机制,如信号量结合使用,来达到进程间同步及互斥。
(6)信号量(semaphore):通过信号解决器控制同步与互斥。
(7)套接字(Socket):更为普通进程间通信机制,可用于不同机器之间进程间通信。
三、 网络编程
1、TCP/IP(传播控制合同)中TCP和IP(网际合同)分别承担什么责任?
TCP负责你应用软件(例如你浏览器)和你网络软件之间通讯。
IP负责与其她计算机通讯(发送主机ip地址+接受主机ip地址)
TCP负责在数据被发送此前把它分装到IP 包 ,然后在数据接受后来再组装起来。
IP负责把数据包发送到对的目的计算机。
例题1:在tcp/ip模型中进程到进程之间通信属于(传播)层,主机到主机属于(网络)层,设备到设备属于(数据链路)层,程序到程序属于(应用)层
2.四层模型?七层模型?TCP/IP合同涉及?
这7层是:应用层,表达层、会话层,传出层(udp/tcp),网络层(IP),数据链路层(互换机),物理层(集成线(hub))
这4层分别为:应用层:传播层:网络层:链路层。
TCP/IP合同族涉及(IP)、(ARP)、(ICMP)、(UDP)、(TCP)、(RIP)、Telnet、(SMTP)、DNS等合同。
3、请简述DNS、活动目录、域概念。
参照答案:
DNS:域名服务,作用是将网络域名解析成IP地址;
域:网络系统一种安全边界,在一种域当中,计算机和顾客共享某些列安全信息。
4、问:select()函数作用?
答:用于一种进程同步监听各种文献描述符,还可以设立监听超时时间。
5、问:tcp、udp、ip、http、telnet合同分别位于TCP/IP合同哪一层?
答:tcp、udp位于传播层// 说出TCP/IP分别相应OSI七层中哪一层传播层,网络层
Ip合同位于网络层。
http及telnet位于应用层。
6、问:路由器工作在TCP/IP合同中那一层?
答:网络层。
7.端口作用?
端口是一种软件构造,一种端口相应一种16比特数。服务进程普通使用一种固定端口。
端口标记通信进程:作用:1、区别系统里多进程
2、被客户程序或服务进程用来发送和接受信息
端标语分类:知名端标语(IANA):21号非配给ftp 80号端口分派给http
动态端标语
8、网络通信过程?
1、面向无连接:需携带地址(邮政系统服务抽象)。
2、面向连接:无需地址,本质上连接是一种管道。(电话系统服务模式抽象)。
8.物理地址转换成IP地址合同?反之?
RARP(物理转IP) ARP(IP转物理)
9.MAC层通信合同有哪些?
ISO2110,IEEE802,IEEE802.2
网卡MAC是由6组什么构成
4 有16进制数据构成,前三组表达厂商,有IEEE来分派,并可以在细分,后三
组表达该制造商所制造某个网络产品(如网卡)系列号。
10.对WLAN理解。
WLAN是指应用无线通信技术将计算机设备互联起来,构成可以互相通信和实现资源共享网络体系。无线局域网本质特点是不再使用通信电缆将计算机与网络连接起来,而是通过无线方式连接,从而使网络构建和终端移动更加灵活。
12、问:什么是tcp合同与udp合同(提供进程间通信能力)?她们区别及优缺陷?
答:tcp:面向连接,可靠传播层合同
面向连接:建立连接-->使用连接-->释放连接(虚电路)
可靠性:对包进行排序并检错,而损坏包可以重传。
tcp数据包包括序号和确认序号
窗口式流量控制、慢启动和拥塞避免
(服务对象:telnet,ftp,Rlogin,STMP等)
udp:无连接,不可靠传播层通信合同
面向无连接:发送数据之前不需要建立连接。
不可靠:
不对数据包顺序进行检查
没有错误检测和重传机制
服务对象:
重要用于那些面向查询——应答服务(NFS(网络文献系统)/NTP(网络时间合同)/DNS(域名解析合同))
13、问:ip地址192.168.220.22属于什么IP?(IP地址:主机ID和子网ID,主机ID全为0ip地址表达网段地址,主机ID全为1地址广播地址)
答:私有IP地址。
14、问:什么是大端什么是小端字节序?网络字节序是大端还是小端?
答: 小端:低地址存储低字节,高地址存储高字节;
大端:相反;网络字节序是:大端。
15、网络中,如果客户端突然掉线或者重启,服务器端怎么样才干立即懂得?
若客户端掉线或者重新启动,服务器端会收到复位信号。
16、腾讯笔试题:tcp三次握手过程,accept发生在三次握手哪个阶段?
accept发生在三次握手之后。
第一次握手:客户端发送syn包(syn=j)到服务器。
第二次握手:服务器收到syn包,必要确认客户SYN(ack=j+1),同步自己也发送一种ASK包(ask=k)。
第三次握手:客户端收到服务器SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。
三次握手完毕后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接。
tcp面向连接四次挥手过程:
(1)第一次挥手:Client发送一种FIN,用来关闭Client到Server数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一种ACK给Client,确认序号为收到序号+1(与SYN相似,一种FIN占用一种序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一种FIN,用来关闭Server到Client数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一种ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完毕四次挥手。
(2)为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
这是由于服务端在LISTEN状态下,收到建立连接祈求SYN报文后,把ACK和SYN放在一种报文里发送给客户端。而关闭连接时,当收到对方FIN报文时,仅仅表达对方不再发送数据了但是还能接受数据,己方也未必所有数据都发送给对方了,因此己方可以及时close,也可以发送某些数据给对方后,再发送FIN报文给对方来表达批准当前关闭连接,因而,己方ACK和FIN普通都会分开发送。
17、腾讯笔试题:用UDP合同通讯时如何得知目的机与否获得了数据包
可以在每个数据包中插入一种唯一ID,例如timestamp或者递增int。
发送方在发送数据时将此ID和发送时间记录在本地。
接受方在收到数据后将ID再发给发送方作为回应。
理解:
路由(网络层):可以分割子网,广播域,提供防火墙功能。
互换机(数据链路层):根据mac地址进行寻址。
18、在子网210.27.48.21/30种有多少个可用地址?分别是什么?
可用地址是两个,一种网段地址,一种广播地址。
19、从SOCKET编程究竟层以太网物理包要通过哪几次封装?
SOCKET包、IP包、以太网包
20.列出3个惯用网络合同使用端口。
答:HTTP合同用80端口,FTP合同用21端口,POP3合同用110端口
四 C++与QT(类:具备共性实体抽象。)
3.Windows程序入口是哪里?写出Windows消息机制流程。
答:
Windows程序入口是WinMain函数
消息机制:系统将会维护一种或各种消息队列,所有产生消息都会被放入或是插入队列中。系统会在队列中取出每一条消息,依照消息接受句柄而将该消息发送给拥有该窗口程序消息循环。每一种运营程序均有自己消息循环,在循环中得到属于自己消息并依照接受窗口句柄调用相应窗口过程。而在没有消息时消息循环就将控制权交给系统。
1. 面向对象三个基本特性,并简朴论述之?
答:1)封装:将客观事物抽象成类,每个类对自身数据和办法实行protection(private,protected,public)
2)继承:实现继承(指使用基类属性和办法而无需额外编码能力)、可视继承(子窗体使用父窗体外观和实当代码)、接口继承 ( 仅使用属性和办法,实现滞后到子类实现)。
3)多态:容许将子类类型指针赋值给父类类型指针。
(1). 多态作用?
答:重要是两个:1)隐藏实现细节,使得代码模块化。
2)类继承与派生时候,接口重用。
2. 重载(overload)和重写(overried,有书也叫做“覆盖”)区别?
答:从定义上来说:
重载:是指容许存在各种同名函数,而这些函数参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
重写:是指子类重新定义复类虚函数办法。
从实现原理上来说:
重载:编译器依照函数不同参数表,对同名函数名称做修饰,然后这些同名函数就成了不同函数。
重写:当子类重新定义了父类虚函数后,父类指针依照赋给它不同子类指针,动态调用属于子类该函数,这样函数调用在编译期
间是无法拟定(调用子类虚函数地址无法给出)。
3、使用new与malloc分派内存有什么区别?
1、new 是c++中操作符,malloc是c 中一种函数
2、new 不止是分派内存,并且会调用类构造函数,同理delete会调用类析构函数,而malloc则只分派内存,不会进行初始化类成员工作,同样free也不会调用析构函数
3、内存泄漏对于malloc或者new都可以检查出来,区别在于new可以指明是那个文献那一行, 而malloc没有这些信息。
4、new 和 malloc效率比较
new可以以为是malloc加构造函数执行。
new出来指针是直接带类型信息。
而malloc返回都是void指针
4. C++中,核心字struct和class区别仅仅在于:
struct定义类缺省成员为公有,而class定义类缺省成员为私有;
5. C++函数中值传递方式有哪几种?
答:C++函数三种传递方式为:值传递、指针传递和引用传递。
7、构造函数可以是虚函数吗?为什么?
答:不可以,创立对象时必要拟定类型。
8、析构函数可以 是虚函数吗?为什么?
答:可以。释放指向子类基类指针时,不会导致内存泄露。默认析构函数不是虚,当类中至少有一种虚函数时,
需要虚析构函数。
9、C++语言中static核心字作用是什么?
答:
在函数体内,一种被声明为静态变量在这函数被调用过程中维持其值不变。
在模块内(但在函数体外),一种被声明为静态变量可以被模块内所有函数访问,但不能被模块外其她函数所问。
在模块内,一种被声明为静态函数只可被这一模块内其他函数调用。那就是,这个函数被限制在声明它模块本地范畴内使用。
10、 面向对象程序设计思想是什么?
答:把数据构造和对数据构造进行操作办法封装形成一种个对象。
11、什么是类?
答:把某些具备共性对象归类后形成一种集合,也就是类。
12、对象都具备两方面特性是什么?分别是什么?
答:对象具备特性是静态特性与动态特性。
静态特性是只能描述对象属性(成员变量),动态属性是指对象体现出来行为(成员函数)
13、在头文献中进行声明,在相应实现文献中进行类定义有什么意义?
答:这样可以提高编译效率只要编译一次相应.obj文献后,再次应用该类地方,这样类就无法再次编译,从而提高编译效率。
14、在类内部定义成员函数函数体,这种函数会具备那种属性?
答:这种函数会自动为内联函数,这种函数在函数调用地方在编译阶段都会进行代码替代。
15. 成员函数通过什么来区别不同对象成员数据?为什么它可以区别?
答:通过this指针指向对象首地址来区别。
16、C++编译器自动为类产生四个缺省函数是什么?
答:默认构造函数,拷贝构造函数,析构函数,赋值函数。
18. 构造函数与普通函数相比在形式上有什么不同?(构造函数作用,它声明形式来分析)
答:构造函数是类一种特殊成员函数,普通状况下,它是专门用来初始化对象成员变量。
构造函数名字必要与类名相似,它不具备任何类型,不返回任何值。
19、. 什么时候必要重写拷贝构造函数?
答:当构造函数涉及到动态存储分派空间时,要自己写拷贝构造函数,并且要深拷贝。
20. 构造函数调用顺序是什么?
答:
1.先调用基类构造函数
2.按声明顺序初始化数据成员
3.最后调用自己构造函数。
21、 哪几种状况必要用到初始化成员列表?
答:类成员是常量成员初始化;
类成员是对象成员初始化,而该对象没有无参构造函数。
类成员为引用时。
22、 什么是常对象?
答:常对象是指在任何场合都不能对其成员值进行修改对象。
23、静态函数存在乎义?
静态私有成员在类外不能被访问,可通过类静态成员函数来访问;
当类构造函数是私有时,不像普通类那样实例化自己,只能通过静态成员函数来调用构造函数。
24、在类外有什么办法可以访问类非公有成员?
答:友元,继承,公有成员函数。
25、 什么叫抽象类?
答:不用来定义对象而只作为一种基本类型用作继承类。
26、 运算符重载意义?
答:为了对顾客自定义数据类型数据操作与内定义数据类型数据操作形式一致。
27、不容许重载5个运算符是哪些?
答:
1. .*(成员指针访问运算符号)
2. ::域运算符
3. Sizeof 长度运算符号
4. ?:条件运算符号
5. .(成员访问符)
28、 运算符重载三种方式?
答:普通函数,友元函数,类成员函数。
29、 流运算符为什么不能通过类成员函数重载?普通怎么解决?
答:由于通过类成员函数重载必要是运算符第一种是自己,而对流运算重载规定第一种参数是流对象。因此普通通过友元来解决。
30、 赋值运算符和拷贝构造函数区别与联系?
答:相似点:都是将一种对象copy到另一种中去。
不同点:拷贝构造函数涉及到要新建立一种对象。
拷贝构造函数:complex A(100);example B=A;
31、 拷贝构造函数在哪几种状况下会被调用?
答:1.当类一种对象去初始化该类另一种对象时;
2.如果函数形参是类对象,调用函数进行形参和实参结合时;
3.如果函数返回值是类对象,函数调用完毕返回时。
32、对象间是如何实现数据共享?
答:通过类静态成员变量来实现对象间数据共享。静态成员变量占有自己独立空间不为某个对象所私有。
33、 友元关系有什么特性?(类外部访问类私有成员)
答:单向,非传递,不能继承。
34、内联函数和宏区别在于:
宏是由预解决器对宏进行代替,
而内联函数是通过编译器控制来实现。
35、 构造与联合有和区别?
1. 构造和联合都是由各种不同数据类型成员构成, 但在任何同一时刻, 联合中只存储了一种被选中成员(所有成员共用一块地址空间), 而构造所有成员都存在(不同成员 存储地址不同)。
2. 对于联合不同成员赋值, 将会对其他成员重写, 本来成员值就不存在了, 而对于构造不同成员赋值是互不影响。
36、用什么函数启动新进程、线程。 (4 分 )
答:CreateProccess()创立进程;
CreateThread()创立线程
MFC中还提供了_beginthread()与_beginthreadex()函数创立线程
MFC中SendMessage和PostMessage区别?
答:PostMessage 和SendMessage区别重要在于与否等待应用程序做出消息解决。
PostMessage只是把消息放入队列,然后继续执行;
而SendMessage必要等待应用程序解决消息后才返回继续执行。
这两个函数返回值也不同,
PostMessage返回值表达PostMessage函数执行与否对的,
而SendMessage返回值表达其她程序解决消息后返回值。
38. MFC 中,大某些类是从哪个类继承而来( CCmdTarget 、 CObject 、 CWinApp 、 CWnd )? (2 分)__CObject __
39. WaitForSingleObject 有何作用;
m_pThrd 类型是 CWinThread* 时, WaitForSingleObject(m_pThrd->m_hThread,INFINITE); 有何作用。 (4 分 )
答:WaitForSingleObject是表达等待线程一种函数
展开阅读全文