当前位置: 首页 > news >正文

Qt 每日面试题 -6

51、如果软件除了问题(Bug ),如何快速定位?主要方法有哪些?

打印输出/代码调试/日志记录/分析工具/找同事讨论。

  1. 二分法定位技巧
    无论是有多复杂的代码,利用二分法定位技巧一般都是可以定位到问题所在。从二分法定位技巧可以延伸出一些具体的处理bug的方法,比如:对输入数据二分、对代码版本二分、注释掉部分代码、在不同位置插入试探性代码、对运行环境二分。

  2. IDE调试
    IDE的VS debug的功能简直就是立竿见影。它可以加断点,单步调试。
    单步调试可以让我们对代码逻辑,执行顺序,以及各种中间结果更加清晰。
    至于本身容易出错的BUG,用IDE调试简直是再合适不过了。

  3. 重新读一遍程序
    相对新手程序员来说,如果代码出现bug,可以重新读一遍程序。这种方法是最有效、最快速的Debug方式。

  4. 重写一遍
    如果你发现无论如何也找不到BUG,而且代码只是复杂,本身不是很长,直接重写代码吧!

52、引用和指针有何区别

  1. 指针是一个对象,而引用仅是一个对象的别名
  2. 引用使用时无需解引用,指针需要
  3. 引用只能在定义时初始化一次,而指针可变
  4. 引用不能为空,指针可以为空
  5. 有多级指针没有多级引用
  6. 不会为引用变量开辟内存空间,它和它引用的变量共用一块内存空间,指针会开辟内存空间
  7. 引用自加改变引用值的内容,指针自加改变指针的指向
  8. sizeof含义不同,引用结果为引用类型的大小,指针始终是地址空间所占大小
  9. 引用比指针使用起来相对更安全

53、什么情况下使用虚函数? 和纯虚函数有什么区别? 虚析构函数的作用是什么?

虚函数的主要作用是"运行时多态"。虚析构函数的作用在于使用delete删除一个对象时,能确保析构函数被正确的执行。区别:

  1. 虚函数和纯虚函数可以定义在固一个类(class)中,含有纯虚函数的类被称为抽象类(abstractclass),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。

  2. 虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义。

  3. 虚函数和纯虚函数都可以在子类(sub class)中被重载,以多态的形式被调用。

  4. 虚函数和纯虚函数通常存在于抽象基类(abstract base class -ABC)之中,被继承的子类重载,目的是提供一个统一的接口

  5. 虚函数的定义形式:virtual {method body}
    纯虚函数的定义形式: virtual { }= 0;
    虚函数和纯虚函数的定义中不能有static标识符,原因很简单,被static修饰的函数在编译时候要求前期bind,然而虚函数却是动态绑定(run-time bind),而且被两者修饰的函数生命周期(life recycle)也不一样

  6. 虚函数必须实现,如果不实现,编译器将报错。

  7. 对于虚函数来说,父类和子类都有各自的版本。由多态方式调用的时候动态绑定。

  8. 实现了纯虚函数的子类,该纯虚函数在子类中就编程了虚函数,子类的子类即孙子类可以覆盖该虚函数,由多态方式调用的时候动态绑定。

  9. 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。

  10. 多态性指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性∶编译时多态性,运行时多态性。

    • a.编译时多态性:通过重载函数实现
    • b.运行时多态性:通过虚函数实现.
  11. 如果一个类中含有纯虚函数,那么任何试图对该类进行实例化的语句都将导致错误的产生,因为抽象基类(ABC)是不能被直接调用的。必须被子类继承重载以后,根据要求调用其子类的方法。

54、对Qt元对象系统了解吗?

Qt对标准的C++进行了扩展,如信号槽、对象属性等。Qt的元对象编译系统MOC是一个预处理器,当Qt读取源文件时检测到类中包含有Q_OBJECT宏时,则会创建一个新的文件(生成路径下的moc开头的文件),将源码转换为C++编译器可以识别的代码写入moc开头的文件,然后C++编译器对其进行编译。 当你的类需要使用Qt的扩展功能时,如信号槽、对象属性等时,则必须使用MOC,反之如果你的类不使用这些功能的时候不要无畏的使用MOC增大源码体积。 使用MOC系统的方法︰

  1. 继承QObject。
  2. 类中添加Q_OBJECT宏。

55、Qt中的MVD了解吗?

Qt的MND包含三个部分Model(模型); View(视图); 代理(Delegate)。Model否则保存数据,View负责展示数据,Delegate负责ltem样式绘制或处理输入。这三部分通过信号槽来进行通信,当Model中数据发生变化时将会发送信号到View,在View中编辑数据时,Delegate负责将编辑状态发送给Model层。基类分别为QAbstractItemModel、QAbstractltemView、QAbstractltemDelegate。Qt中提供了默认实现的MVD类,如QTableWidget、QListWidget、QTreeWidget等.

56、QObject是否是线程安全的

QObject及其所有子类都不是线程安全的(但都是可重入的)。因此,你不能有两个线程同时访问一个QObject对象,除非这个对象的内部数据都已经很好地序列化(例如为每个数据访问加锁)。

57、QObject的线程依附性是否可以改变

调用QObject::moveToThread()函数。该函数会改变一个对象及其所有子对象的线程依附性。

由于QObject本身是线程不安全的,因此moveToThread接口的调用必须在QObject对象所在的线程内调用

58、QFrame与QWidget的区别

QFrame和QWidget都是Qt中的GUI组件,但是它们有一些区别:

  1. 继承关系∶QFrame继承自QWidget,所以QFrame具有QWidget的所有功能。
  2. 功能 :QFrame提供了一个简单的框架 ,可以作为其他控件的容器。 它还可以用来绘制简单的图形,如线条。QWidget没有这样的功能,但是提供了基础的GUI组件功能,如设置尺寸和位置等。
  3. 外观∶QFrame可以有边框和背景颜色,因此外观更加丰富。QWidget只有背景颜色,没有边框。通常,当需要一个简单的框架时使用QFrame当需要基础的GUI组件功能时使用QWidget

59、信号重载了,如何确定连接哪个信号?

采用函数指针确定连接哪个信号。

60、槽函数的参数可以少于信号的参数吗?

  • 槽函数本身参数比信号的少
  • 槽函数可以参数带有默认参数

相关文章:

  • LVS+keepalived整合负载均衡配置
  • 物理学基础精解【41】
  • MySql中索引失效的情况及原因
  • CSS开发全攻略
  • ubuntu2204操作系统使用可执行文件方式安装docker-compose记录
  • Qt网络编程——QUdpSocket
  • [大语言模型-论文精读] MoRAG - 基于多部分融合的检索增强型人体动作生成
  • [C++][程序退出]详细讲解
  • C++【类和对象】(取地址运算符重载与实现Date类)
  • Jenkins提示Host key verification failed的解决办法
  • RabbitMQ 消息队列:生产者与消费者实现详解
  • how to remove the text shadow under app icon on Windows
  • Java 编码系列:反射详解与面试题解析
  • 更新系统提示“系统备份失败”
  • 工厂模式与建造者模式的区别
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • AWS实战 - 利用IAM对S3做访问控制
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • C# 免费离线人脸识别 2.0 Demo
  • Consul Config 使用Git做版本控制的实现
  • crontab执行失败的多种原因
  • CSS 专业技巧
  • JavaScript 基础知识 - 入门篇(一)
  • Js基础知识(一) - 变量
  • js算法-归并排序(merge_sort)
  • PHP那些事儿
  • Python十分钟制作属于你自己的个性logo
  • 和 || 运算
  • 技术发展面试
  • 前端工程化(Gulp、Webpack)-webpack
  • 由插件封装引出的一丢丢思考
  • 与 ConTeXt MkIV 官方文档的接驳
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • !!Dom4j 学习笔记
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #### golang中【堆】的使用及底层 ####
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (23)mysql中mysqldump备份数据库
  • (AngularJS)Angular 控制器之间通信初探
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (二十六)Java 数据结构
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (三)mysql_MYSQL(三)
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET 服务 ServiceController
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net 无限分类
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .net和jar包windows服务部署