1、请写出c++三大特性:封装、继承、多态。
2、TCP与UDP两种通信方式有什么区别?
答:
TCP(传输控制协议)和UDP(用户数据报协议)是两种不同的传输层协议。
连接性:TCP提供面向连接的服务,在数据传输前,建立一个可靠的连接,数据传输完成后再断开连接。而UDP则是无连接协议,每个数据包都是独立的,发送端和接收端之间没有建立持久的连接。
可靠性:TCP提供可靠的数据传输,通过序号、确认和重传机制,确保数据按顺序、完整地传输到目的地。而UDP则不提供可靠性保证,数据包可能会丢失或乱序,应用层需要自行处理。
流量控制和拥塞控制:TCP支持流量控制和拥塞控制,以防止网络拥塞和数据丢失。而UDP不提供流量控制和拥塞控制,数据包可能会因为网络状况而丢失。
数据包大小:TCP没有固定的数据包大小限制,数据被分割成TCP段,根据网络状况动态调整段的大小。而UDP有一个最大传输单元(MTU),超过这个大小的数据包将被分片。
通信开销:TCP由于连接的建立和维护,以及可靠性保证的机制,通信开销较大。而UDP由于无连接和较少的机制,通信开销较小,适用于实时性要求较高的应用。
应用场景:TCP适用于要求可靠数据传输、顺序传输的应用,如文件传输、网页访问等。而UDP适用于对实时性要求较高、可以容忍少量数据丢失的应用,如音频/视频流、在线游戏等。
头部开销:TCP的头部开销较大,包含序号、确认号、窗口大小等字段。而UDP的头部开销较小,只包含基本的源端口、目的端口、长度和校验和字段。
3、下列关于栈的叙述正确的是:D
A.栈是非线性结构 B.栈是一种树状结构 C.栈具有先进先出的特征 D.栈具有后进先出的特征
分析:栈是线性结构
4、请说明指针类型和引用类型的区别,写出c++样例代码。
答:指针:指针是一个变量,其值为另一个变量的地址。我们可以使用指针来间接地访问、修改或传递该变量的值。指针可以是NULL(或nullptr,在C++11及之后的版本中),表示它不指向任何对象。
引用:
引用是已存在变量的别名,一旦引用被初始化为一个对象,它就不能被改变为指向另一个对象。引用总是指向某个对象,并且在其生命周期内始终有效。
指针:可以重新赋值,使其指向另一个对象或设置为NULL(或nullptr)。
引用:必须在声明时初始化,并且在其生命周期内不能重新赋值。
指针:可以为NULL(或nullptr),表示它不指向任何对象。
引用:不能有“空”引用,它必须始终指向某个对象。
指针:当复制一个指针时,复制的是指针的值(即地址),而不是它所指向的对象。
引用:当复制一个引用时,复制的是对原始对象的引用,而不是原始对象本身。
C++样例代码:

#include <iostream>  
  
int main() {
     
    int a = 10;  
    int b = 20;  
  
    // 使用指针  
    int* ptrA = &a;  // 指针ptrA指向变量a  
    int* ptrB = ptrA; // 指针ptrB复制ptrA的值(地址),因此ptrB也指向变量a  
    *ptrB = 30;       // 通过ptrB修改a的值  
    std::cout << "a: " << a << std::endl; // 输出:a: 30  
    std::cout << "b: " << b << std::endl; // 输出:b: 20  
  
    ptrB = &b;       // 指针ptrB重新赋值,指向变量b  
    *ptrB = 40;      // 通过ptrB修改b的值  
    std::cout << "b: " << b << std::endl; // 输出:b: 40  
  
    // 使用引用  
    int& refA = a;   // 引用refA是变量a的别名  
    refA = 50;       // 通过refA修改a的值  
    std::cout << "a: " << a << std::endl; // 输出:a: 50  
  
    int& refB = b;   // 引用refB是变量b的别名  
    refB = 60;       // 通过refB修改b的值  
    std::cout << "b: " << b << std::endl; // 输出:b: 60  
  
    // 下面的代码是错误的,因为引用必须在声明时初始化,并且在其生命周期内不能重新赋值。  
    // int& refC;   
    
03-05 11:29