【面试题总结1】-Static、Const、QT中基于TCP的通信服务器/客户端端操作

1、在C++和C中static关键字的用法

在C语言和C++中,

① static修饰未初始化 的全局变量,结果默认为0 ;

② 当static修饰局部变量 时,只是延长 了这个变量的生命周期 ,并没有改变其作用域。

比如说,这个变量是在哪个函数被定义的,那么它的作用域就只在这个函数中,但是它的声明周期被延长了,一般的局部变量时函数结束,变量就会被释放掉,但是以static修饰的局部变量,会在整个项目结束时才被释放,所以它的值能够被保留,再次调用该函数时,不会重新被定义出来,是继续使用之前的这一个变量;

③ 用static修饰的函数 ,只能在本文件中被调用 ,不能被跨文件调用;

④ 用static修饰的全局变量 ,不能用extern引用到其他文件使用;

⑤ 用static修饰的指针 ,**不能指向auto类型的地址。**因为计算机时先为静态变量分配空间,再分配auto类型的变量,不可以使用指针指向不存在的变量地址。
在C++中,有静态数据成员和静态成员函数两个概念,

① 静态数据成员 和静态成员函数都属于类 ,但不属于类的实例化 ,它们在所有类的实例当中 ,是共享的。

② 静态数据成员 就是在类中定义数据时,在数据成员前+static关键字 ,它需要在类外进行初始化 ,如果不初始化 的话默认结果为0,但不建议这么做。

③ 静态成员函数 也就是在类中定义函数时 ,在函数声明前+static ,静态成员函数 只能访问 静态数据成员。

2、在C++和C中const关键字的用法

const的作用是:保护数据不被修改

  1. 当const修饰一个普通变量 时,说明这个变量的值不能被修改 ,所以在定义 该普通变量时要对其初始化 ,否则后期无法更改它的值
  2. const修饰的全局变量 ,(值不能被修改),变量的空间在静态区的只读段
  3. const修饰的局部变量 ,(值不能被修改),变量的空间在栈区
  4. 将const放在*号前 面,修饰的是值 ,如果放在*后 面,表示指针的指向不能修改 ,可以通过指针修改指针中的值,如果两个都修饰**(*前后都有const),两个都不能更改**
  5. const修饰函数形参数据 ,则为保护形参数据不被更改。当指针、引用作为函数形参,不能该值的时候需要用const修饰
  6. const修饰函数的返回值,(修饰指针、引用作为形参,保护形参数据不被更改)如果修饰的是值返回,可修饰,可不修饰,当修饰的是指针或者引用返回的时候,需要设置成const

在C++中 ,const修饰的成员变量,代表这是常成员变量,必须使用初始化列表进行初始化。

① 当类中有常成员的时候,必须使用初始化列表进行初始化,

② 类中有成员子对象时,调用构造函数完成初始化列表

③ 保护成员变量不被修改

④ 任意一个常成员函数中不能修改常成员变量的值,除非使用vlabel关键字(取消常属性)

3、详细说一下QT中基于TCP的通信中服务器端操作

  1. 创建一个QTCPServer的类对象,该类对象就是一个服务器
  2. 将该对象调用listen函数设置成监听状态 ,监听时,可以监听指定的ip地址 ,也可以监听所有主机地址(Any) ,可以通过指定端口号 ,也可让该服务器自动选择
  3. **当有客户端发来连接请求时,该服务器就会自动发射一个newConnection的信号,**我们可以将该信号连接到自定义的槽函数中处理相关逻辑
  4. 在槽函数中,可以调用nextPendingConnetion函数可以获取最新连接的客户端套接字的地址,我们可以将该套接字存入到客户端容器中
  5. 此时,服务器已经和客户端建立连接请求了,如果有客户端向服务器发来数据,那么对于的客户端套接字就会发射一个readyRead的信号
  6. 读取套接字中的数据 使用read、readLine、readAll函数来完成
  7. 向套接字中写数据 ,可以使用write函数完成
  8. 关闭服务器 ,使用close来完成
  • 注意:QByteArray和QString之间的转换

4、详细说一下QT中基于TCP的通信中客户端操作

  1. 实例化一个QTCPSocket的类对象
  2. 调用该对象的成员函数connectToHost连接到服务,连接服务器时,需要给定服务器的ip地址和端口号
  3. 如果连接服务器成功,那么该客户端就会自动发射一个connected的信号,我们可以将该信号连接到槽函数中处理相关逻辑
  4. 如果服务器有数据向客户端发来,那么该客户端就会自动发射一个readyRead信号,我们可以在该信号对应的槽函数中处理数据
  5. 可以使用read、readLine、readAll读取客户端套接字中的数据
  6. 可以使用write向服务器发送数据
  7. 使用成员函数disConnectFromHost断开与服务器的连接
  8. 如果成功断开与服务器的连接 ,那么该套接字就会自动发射一个disconnected的信号
  • 注意:QByteArray和QString之间的转换

    各个信号在构造函数内连接即可,不用在槽函数中连接

相关推荐
All for pursuit.7 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
正在走向自律7 小时前
AI数据分析与可视化:从基础到应用实践
服务器·人工智能·python·机器学习·数据分析·pandas
小师兄吃牛肉7 小时前
C语言中的nullptr有必要吗
c语言·c++·算法
OnlineProxy8 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
WL学习笔记8 小时前
日期类(C++)
开发语言·c++·日期类实现
H.莓飛9 小时前
【C++】命名空间、缺省参数、函数重载与引用
linux·开发语言·c++·visual studio
91刘仁德9 小时前
IP协议详解:从IP协议头到网段划分、路由与NAT
linux·服务器·网络·网络协议·tcp/ip
辻弋2019 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
汉克老师10 小时前
GESP2026年9月认证C++八级( 第一部分选择题(1~7题)精讲
c++·gesp·小学生·学c++编程
郝学胜_神的一滴11 小时前
C++ Templates 06:搞懂模板代码的三种组织方式
c++·visual studio