C++ 编译与执行分为哪几个阶段?
- 预处理,根据文件中的预处理命令修改源文件的内容
- 编译:编译为汇编代码
- 汇编:把汇编代码翻译为机器指令
- 链接:链接目标代码生成可执行程序
什么是C++?请简述优缺点
C++是一种面对对象的编程语言,实现了继承,抽象,多态和封装的概念。 优点:能够开发复杂的应用程序,极大的提高了灵活性,让开发者控制资源的使用,最大限度提高性能。缺点:由于C++比较自由,导致指针对内存操作可能造成内存溢出,野指针等问题,从而造成程序崩溃。可以使用智能指针解决问题。
- 继承:当创建一个类时,不需要重新编写新的数据成员和函数,只需要指定新建的类继承一个已有的类成员即可。
- 一个类可以派生自多个类,这意味着它可以从多个基类继承数据和函数(警惕菱形继承)。
- 多态:多态意味着调用成员函数的时候,会根据函数的对象类型来执行不同的函数。 如何理解多态:同一个操作作用于不同的对象,产生不同的执行结果。C++多态意味着当调用虚函数时,会根据调用的类型对象是实力类型执行不同的操作。 实现:通过虚函数实现,使用virtual声明的成员函数就是虚函数,允许子类重写。声明基类的指针或者隐痛指向不同的子类对象,调用相应的虚函数,可以根据指针或者子类的不同执行不同的操作。
重写:派生类覆盖基类的虚函数声明函数
重载:函数名相同,参数类型顺序不同的函数构成重载。
为什么使用动态分配内存?
例如声明一个数组可能会出现的问题:
- 该数组限制了程序的容量,将无法存储超过数据的上限的数据
- 如果该数据只存储了一个数据,却分配了几百个内存地址,会降低性能,如果使用new动态分配,使用delete释放,将不会有这些问题。
进程和线程的区别?
进程是资源(内存,打开的文件)分配的单位,线程是CPU调度的单位。 进程拥有完整地资源平台,线程只独享不可少的资源比如寄存器和栈。
什么是死锁?
死锁是两个以上的线程在运行中因争夺资源造成的一些线程都无法向前推进。
Qt优点?
- 跨平台,几乎支持所有平台
- 接口简单文档详细
- 开发效率高
缺点
- 作为一个软件平台,比较庞大臃肿
QT的核心机制?
MOC也就是元对象编译系统,提供了用于内部通讯的信号和槽机制,运行时类型信息和动态属性系统。
什么是信号和槽机制?如何使用信号实现对象之间通讯?
信号和槽是Qt框架中的用于对象之间通信的机制。信号是一种特殊的函数,用于发出通知对象已经发生了某个事件。当一个信号被触发时,与之相连的槽函数将会被自动调用。可以实现对象之间的通讯。
QT常见的事件处理有哪些?
键盘事件,鼠标事件,定时器事件,绘图事件
extern "C"的作用?
实现C++调用C语言,提示编译器这部分代码按照C语言方式进行编译。
QT自定义一个信号槽,触发信号,QT多个信号如何关联如何一并处理?
1:信号发出,可以发送一个int类型的数字,或者说标志,在槽函数中进行区分。 2:在草函数中获取发送信号的函数,使用sender函数获取发送信号。
Qt如果一个信号的处理方法一直没有执行,可能原因?
断开连接,或者连接失败,也可能是多线程排队胡总和锁死了
段错误,什么原因导致的?
一般试指针问题,空指针或者野指针,可以使用断电排查,也可以打印日志定位问题点。
第一个:在关闭界面时会异常退出,由于是在栈区创建之后会自己释放,所以程序结束时候创建先释 放,所以这里是widget后创建先释放,导致label还没释放但是承载他的widget已经连带着自己和label 释放了,但是label还做了内存管理,内存管理不会去判断是否已经释放了,就会出现自己再释放一次的 问题;所以解决方法就是将widget先创建。
第二个:A::print();显示声明
QT的三大核心机制
信号槽,元对象吸引同,事件模型(鼠标事件,键盘事件,定时器,绘图事件等)