Qt 面试题学习01~03复习_2024-11-24

Qt面试题

    • 1、Qt信号槽机制的优势与不足
    • 2、Qt 信号与槽的本质是什么
    • 3、引用和指针有何区别
    • 4、sizeof/strlen区别?C语言中malloc和C+ +语言中new有何区别?C/C++ 程序编译的内存分配情况?
    • 5、面向对象的三大特征?C+ +语言的空类有哪些成员函数?
    • 6、&&/&||/|有什么区别?Typedef/define/const/static 有什么区别?
    • 7、如何避免野指针
    • 8、左值引用和右值引用的区别?右值引用意义?
    • 9、请说出Qt常用类8个控件?

1、Qt信号槽机制的优势与不足

优势:
(1)类型安全

需要关联的信号槽的签名是相同的,即信号和接受该信号的槽的参数类型和参数个数相同。

(2)松散耦合

激发信号的Qt对象只需在适当时间发送信号,无需知道是否会接受和是哪个对象哪个信号槽接收它发出的信号。

(3)灵活性

一个信号可以关联多个槽,一个槽也可以关联多个信号

不足:

速度较慢,信号与槽机制运行速度比直接调用非虚函数慢10倍

原因: 1.需要定位接收信号的对象

   2.安全地遍历所有关联槽

   3.编组、解组传递参数

   4.多线程的时候,信号需要排队等待

2、Qt 信号与槽的本质是什么

回调函数
信号:对象在特定事件发生时发出信息

槽:响应信号方法,槽可以是任何函数。

3、引用和指针有何区别

1. 指针是一个对象,而引用只是对象的别名

2. 引用使用时无需解引用,而指针需要

3. 引用只能在定义时初始化一次,而指针可变

4. 引用不能为空,指针可以为

5. 有多级指针,没有多级引用

6. 引用变量不会开辟内存空间,和引用的变量共用一块内存空间,指针会开辟内存空间

7. 引用自加改变引用值的内容,指针自加改变指针的指向

8. sizeof含义不同,引用结果为引用类型的大小,指针始终是地址空间所占大小

9. 引用比指针使用起来相对更安全

4、sizeof/strlen区别?C语言中malloc和C+ +语言中new有何区别?C/C++ 程序编译的内存分配情况?

sizeof和strlen的区别:
sizeof是一个操作符,可以用来获取一个变量或类型的字节数,不受变量值的影响。例如,sizeof(int)返回4,sizeof(char)返回1
strlen是一个函数,用于获取一个字符串的长度,即字符串组中的字符个数,不包括字符串结束符‘/0’,例如,strlen(“hello”)返回5

malloc和new的区别:
mallocnew都是用于在堆上分配内存的函数。它们主要区别在于一下几点:

  1. malloc返回一个void*指针,需要强制转换为目标类型指针,而new直接返回目标类型指针
  2. mallo只分配内存,不会自动调用构造函数,而new在分配内存后会自动调用构造函数
  3. malloc分配的内存可以使用free函数释放,而new分配的内存必须使用delete操作符释放

C/C++程序编译的内存分配情况:
栈内存分配:用于存储局部变量函数调用的参数和和返回值。栈内存分配由编译器自动完成,不需要手动分配和释放。
堆内存分配:用于存储动态分配的内存,需要使用mallocnew函数手动分配,并在不需要时使用freedelete操作符释放。
全局变量和动态变量:程序运行前就进行内存分配,存储在静态存储区全局存储区,程序结束后释放。

5、面向对象的三大特征?C+ +语言的空类有哪些成员函数?

三大特征:

封装: 将数据和操作数据的函数封装在一个中,隐藏了具体实现细节,只暴露必要的接口给外部使用,保证
数据的安全性和可靠性。

继承: 通过在一个继承已有的,可以扩展其功能,减少代码的冗余,提高代码的复用性和可维护性。

多态:通过函数重载、虚函数和模板机制,实现不同对象对同一信息不同响应,提高程序的灵活性和拓展性。

C++语言的空类是指没有任何成员变量成员函数的类。空类默认会自动生成一些成员函数,包括默认的构造

函数
析构函数拷贝构造函数赋值运算符等。如果需要控制这些默认生成的成员干啥的行为,可以通过定

义相应的函数来实现。

6、&&/&||/|有什么区别?Typedef/define/const/static 有什么区别?

&&是逻辑运算符,表示两个条件都为时结果为

&是位运算符,表示对两个数进行运算。

||是逻辑或运算符,表示两个条件中有一个时结果为

|是位运算符,表示对两个数的位进行运算。

typedf: 用来给数据类型取一个新名字,方便在程序中使用,例如:typedf int INT,表示将int类型去一个新名

字INT。

define: 用来定义常量,在程序中不可修改,例如:const int MAX_NUM = 100;表示将MAX_NUM定义为

100,不可修改。

const:用来定义常量,在程序中不可修改。例如:const int MAXX_NUM = 100;表示将MAX_NUM定义为

100,不可修改。

static:用来定义静态变量,静态变量只能初始化一次,不会随函数的调用而重复初始化。静态变量的作用域

在定义它的函数内,但是它的值会被保留。静态函数只能在定义它的文件内使用。

7、如何避免野指针

野指针是指指向无效内存地址 的指针,它的出现往往会导致程序崩溃产生不可预期的效果。为了避免野指针的出现,可以采取以下措施:

1. 将指针初始化NULLnullptr,即空指针,可以防止指针误用。

2. 在指针释放之后,将其赋值为NULLnullptr,可以避免指针成为野指针。

3. 使用智能指针,智能指针可以自动管理动态内存,避免内存泄漏和指针问题。

4. 避免指针操作过程中越界访问数组,可以使用STL容器代替数组,STL容器可以自动管理内存

5. 对于指向栈上的变量的指针,需要注意其生命周期,避免变量销毁后仍然使用指针。总之,在程序中

使用指针时,需要时刻保持警惕,避免野指针问题。

8、左值引用和右值引用的区别?右值引用意义?

左值引用是指对一个左值(可以取地址、有名字的变量或者对象、表达式或返回值)进行的引用,它的类型

Type&,可以对其进行修改或者取地址的操作。

int a = 10;
int& ref = a; // ref 是 a 的左值引用
ref = 20; // 修改 a 的值为 20

右值引用是指对一个右值(不能取地址、没有名字的临时对象或者表达式)进行的引用,它的类型为 Type&&

通常用于移动语义和完美转发场景。右值引用的一个重要作用是支持移动语义,即通过将右值引用参数移动到目

标对象中,避免了昂贵的内存拷贝操作,提高了程序效率。

std::string getString() {
    return std::string("Hello");
}

std::string&& ref = getString(); // ref 是 getString() 返回的临时对象的右值引用

右值引用的意义在于提供了一种新的引用类型,使得我们可以更加高效地处理临时对象和表达式,同时也支持了

新的语言特性,比如移动语义(窃取”临时对象的资源,而不是进行拷贝操作)和完美转发(不会改变属性)等。

右值引用还可以用于实现移动构造函数移动赋值运算符等操作,从而提高程序的效率和性能。

9、请说出Qt常用类8个控件?

1. QLabel(标签控件):用于显示文本图像

2. QPushButton(按钮控件):用于接收用户的点击事件

3. QLineEdit(单行编辑框控件):用于接收用户输入的单行文本

4. QTextEdit(多行编辑框控件):用于接收用户输入的多行文本

5. QComboBox(下拉框控件):用于在预定义选项中进行选择

6. QCheckBox(复选框控件):用于允许用户选择一个多个选项

7. QRadioButton(单选按钮控件):用于允许用户从多个选项中选择一个

8. QSpinBox/QDoubleSpinBox(数值输入框控件):用于接收用户输入的数值

你可能感兴趣的:(#,Qt面试题,qt,学习,面试)