C++笔试1

1.怎么防止头文件被重复声明?

#ifndef _TEST_H_ //文件一开始声明

#define _TEST_H_

…… //类的定义、声明等

#endif //文件结束后声明

每次编译的时候,在“#ifndef _TEST_H_”这句就判断是否已经编译过这个头文件,若有,则跳过。

2.指针和引用的区别?

①.指针指向一个对象的地址;引用是一个对象的别名。

②.指针可以改变指的对象;引用一旦指定某个对象就不能改变。

③.指针可以为空;引用不可为空。

3.winsocket建立连接的过程?

服务器端:

socket()建立套接字,绑定bind()并监听listen(),用accept()等待客户端连接;发现有客户端连接后,等待接收数据,并建立一个新的套接字,自身重新开始等待连接。

客户端:

socket()建立套接字,连接connect()服务器,使用send()和recv(),在套接字上读写数据,直至数据交换完毕,closesocket()关闭套按字。

4.STL是什么?有什么作用?写出你平常使用的三种STL容器并简要说明?

STL = Standard Template Library,标准模板库,一些“容器”的集合,有list、vector、set、map等。标准化组件,从而不用重复开发,使用现成的组件。

常用的有:list—链表的形式存储数据;vector—可扩容的的数组;queue—FIFO队列;map—键值的映射关系。

5.. 堆和栈的区别与联系  

①、栈区(stack)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

 ②、堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事。

 区别:

 1.管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生内存溢出。

 2. 空间大小:堆内存几乎是没有什么限制。栈一般都是有一定的空间大小。

 3. 碎片问题:对于堆来讲,频繁的new/delete会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题。

 4. 分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。 5. 分配效率:栈的效率比较高。堆的效率比栈要低得多。  

 6. 重载和覆盖的区别与联系 

重载是指不同的函数使用相同的函数名,但函数的参数个数或类型不通。调用的使用根据函数的参数来区别不同的函数。 覆盖是指派生类中重新对基类的虚函数重新实现。即函数名和参数都一样,只是函数的实现体不一样。

 7. 什么是多重继承,好处及缺点 

多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能。 优点:可以使用多重继承编写非常复杂、但很紧凑的代码,如C++ ATL库。 缺点:出现二义性、虚函数、访问权限等问题,容易产生混淆。

8.不用第三个变量 交换两个int型的值(必须用C实现)

 int a = 2, b = 3; a=a+b; b=a-b; a=a-b;

9.32位机器下的sizeof取值?

10.网络的三次握手过程

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 

 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 

 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据。

11.链表删除操作 

      此处实现删除链表中的第二个元素。 

      int * p, * q ,* list //p,q为指针类型, list为已存在的链表      

       p=list; //p指向list的第一个元素       

      q=list; //q指向list的第一个元素 

    if(p->next != null) //list链表的元素超过一个 

    {

        q=q->next; //q指向第二个元素 

        p->next = q->next  //p->next指向第三个元素   

        delete q; //释放链表的第二个元素空间

 }

12. 写一个程序,堆可以访问,栈不可以访问。

     写一个程序,栈可以访问,堆不可以访问。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,420评论 11 349
  • 搬运自牛客网大神总结 extern关键字 extern修饰变量是个声明,此变量/函数是在别处定义的,要在此处引用 ...
    leon4ever阅读 3,801评论 0 9
  • 1、C和C++的特点与区别? 答:(1)C语言特点:1.作为一种面向过程的结构化语言,易于调试和维护; 2.表现能...
    Jaesoon阅读 1,270评论 0 3
  • ?xml version="1.0" encoding="UTF-8"? 1. @protocol 和 categ...
    洋_____阅读 334评论 0 0
  • 再过几个时辰,2017年就结束了,随着年龄的增长,感觉日子越过越快,2017年过得尤其快!也不知为了什么,这时突然...
    清风拍肩阅读 276评论 0 2