面试遇到的新知识点
char str[10],只有10个字符的空间,但是只能存储9个字符,最后一个字符用来存储终止符'\0'
strlen只会计算'\n',不会计算'\0'
值传递:
cpp
void test2(char * str)
{
str = "hello\n";
}
int main()
{
char * str;
test2(str);
cout << str;
return 0;
}
引用传递
cpp
void test3(char ** str)
{
*str = "hello\n";
}
int main()
{
char * str;
test3(&str);
cout << str;
return 0;
}
只有传变量的地址对变量进行解引用才能够修改变量的值。
空类里面有什么?
默认成员函数
1.默认构造
2.拷贝构造
3.赋值运算符
4.移动构造
5.移动赋值
6.析构函数
关于最近的一些面试感受
明显感觉好多岗位都交叉着QT,别人问我QT我都答不上来,只能说一个信号槽和用QT封装了简单的网页。
感觉拿不出手,得好好钻研QT了,至少能吹的出来。
c++的排序算法,快排,堆排,后面还要继续更新一个归并排序,将这三个排序算法掌握基本是够用了;
池性组件,后面还要更新内存池,连接池之类的。
然后把基本的排序和池性组件理清楚,边开始学QT边写算法题。目前来看回溯算法算是入门了,但是动态规划,贪心算法和单调栈还是不清楚,争取把这些搞掉。今天开始学习QT,历时一个礼拜应该能小有成就吧。
QT
QT Creator的界面介绍
项目的结构
简单的QT程序
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
,lab(new QLabel("hello",this))
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 设置标签的位置
lab->setGeometry(100,100,200,200);
// 设置标签的颜色
lab->setStyleSheet("QLabel{background-color:green;color:red}");
// 设置字体的大小
lab->setFont(QFont("楷书",22));
}
信号槽机制
信号(signal)
信号的本质是事件,信号展现方式就是函数。当一个事件发生之后,则发出一个信号(signal)。
槽(slot)
对信号响应的函数
槽与普通函数的区别:
槽函数可以与一个信号关联,当信号被发射的时候,关联的槽函数被自动执行处理。
信号与槽关联是使用**QObject::connect()**函数进行实现
connect
sender:发出信号的对象
signal:sender对象的信号
receiver:信号接收者
method:receiver对象的槽函数,当检测到sender信号,receiver对象调用method方法
信号与槽的连接方式
一个信号可以与另一个信号相连
// 信号一可以触发信号二的发送
connect(object1,SIGNAL(signal1),object2,SIGNAL(signal1));
同一个信号可以和多个槽相连
connect(object1,SIGNAL(signal1),object2,SIGNAL(slot1));
connect(object1,SIGNAL(sIgnal1),object3,SIGNAL(slot2));
同一个槽可以响应多个信号
connect(object1,SIGNAL(signal1),object2,SIGNAL(slot1));
connect(object3,SIGNAL(signal3),object2,SIGNAL(slot1));
常用连接方案
connect(object1,SIGNAL(signal),object2,SLOT(slot));
实战
计算圆球体积
头文件
头文件(dialog.h)
cpp
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
// 引入标签,命令按钮
#include<qlabel.h>
#include<qpushbutton.h>
#include<qlineedit.h>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
QLabel *lab1, *lab2;
QLineEdit *lEdit;
QPushButton *pbt;
// 设置槽函数
public slots:
void CalculateCircleV();
};
#endif // DIALOG_H
main.cpp
cpp
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
// 设置标题
w.setWindowTitle("计算圆球体积");
w.show();
return a.exec();
}
dialog.cpp
cpp
#include "dialog.h"
#include<QGridLayout>
const static double PI=3.1415;
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
// 标签一(提示输入)
lab1 = new QLabel(this);
lab1->setText("请输入圆球的半径:");
// 标签二(显示结果)
lab2 = new QLabel(this);
// 创建一个编辑框空间(专门用于接收用户的输入圆球半径的值)
lEdit = new QLineEdit(this);
// 创建命令按钮
pbt = new QPushButton(this);
pbt->setText(tr("计算圆球体积"));
// 表格布局
QGridLayout *lay = new QGridLayout(this);
// 第一行的第一列
lay->addWidget(lab1,0,0);
// 第一行的第二列
lay->addWidget(lEdit,0,1);
lay->addWidget(lab2,1,0);
lay->addWidget(pbt,1,1);
// 将编辑框信号与槽函数关联,只要文本发生改变就会调用槽函数
// connect(lEdit, SIGNAL(textChanged(QString)),this,SLOT(CalculateCircleV()));
// 将按钮信号与槽函数关联,只有点击按钮,才会调用槽函数
connect(pbt, SIGNAL(clicked()),this,SLOT(CalculateCircleV()));
}
Dialog::~Dialog()
{
}
void Dialog::CalculateCircleV()
{
bool isLoop;
QString str;
QString val = lEdit->text();
int num = val.toInt(&isLoop);
double result = 4.0/3.0*PI*num*num;
lab2->setText(str.setNum(result));
}