参考:
https://blog.csdn.net/lwgechen/article/details/77152319
https://www.cnblogs.com/yjd_hycf_space/p/7495640.html
零 、基础
0.1、Const 与 宏 的区别
http://blog.sina.com.cn/s/blog_60d6fadc01012i52.html
一、与类相关
1.1、class与struct的区别
答:C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能:
①struct能包含成员函数吗? 能!
②struct能继承吗? 能!!
③struct能实现多态吗? 能!!!
既然这些它都能实现,那它和class还能有什么区别?
最本质的一个区别就是成员默认属性和默认继承权限的不同:
①若不指明,struct成员的默认属性是public的,class成员的默认属性是private的;
②若不指明,struct成员的默认继承权限是public的,class成员的默认继承权限是private的
1.2 、Public、protected、private的作用,继承时函数的访问权限
三者访问权限不一样。
1、新建本类对象可以访问Public、protected、private的函数。
Public继承时:子类可以访问父类的public、protected的对象,不能访问private修饰的函数。
Protected继承时:可以访问父类的public对象。不能访问protect对象。(
Private继承时:只可以访问父类的public对象。
子类不能继承父类的生死(构造函数与析构函数)。
1.3 多态种类
答:多态分为两类:通用多态和特定多态;
(1)通用多态:参数多态、包含多态;
①参数多态:包括函数模板和类模板
②包含多态:virtual虚函数
(2)特定多态:重载多态、强制多态
①重载多态:重载多态是指函数名相同,但函数的参数个数或者类型不同的函数构成多态
②强制多态:强制类型转换
参考:
https://blog.csdn.net/xiongchao99/article/details/64441017#t80
二、数据结构
2.1、std
Map的数据结构是怎么样的
Vector是数组还是链表
C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和 set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作
参考:
https://www.cnblogs.com/renyuan/p/3469851.html
vector扩容原理
https://blog.csdn.net/yangshiziping/article/details/52550291
2.2、算法
http://www.cnblogs.com/skywang12345/p/3561803.html#a32
基础排序算法
参考文档:https://blog.csdn.net/langmanqishizaijia/article/details/51159740
冒泡排序算法、还有其他的排序时间复杂度的计算方法
四、QT
4.1、信号槽
①、 看你的项目大部分是QT的,你可以给我描述下你对QT信号槽的了解吗?
对方说了一大堆,听得我稀里糊涂的,我估计连他自己也不知道自己再说些什么,总之多回答根本没再着重点上,于是我又做了引导性的提示,”或者你说说你觉得QT信号槽机制的优缺点吧“
其实QT信号槽是整个QT框架的精髓,对qt信号槽的理解程度反应了一个程序员对Qt的掌握程度,其实这个问题并没有标准答案,下面我把我设置这几个问题的得分点写下来
a、QT信号槽机制的引用精简了程序员的代码量
b、QT的信号槽的建立和解除绑定十分自由
c、QT的信号可以对应多个槽(但他们的调用顺序是随机),也可以多个槽映射一个信号。
e、信号槽同真正的回调函数比起来时间的耗损还是很大的,所有在嵌入式实时系统中应当慎用
f、信号槽的参数限定很多例如不能携带模板类参数,不能出现宏定义等等
变相的问法
②、Q_OBJCT宏的作用
4.2、多线程情况下, Qt中的信号槽分别在什么线程中执行, 如何控制?
可以通过connect函数的第五个参数来控制信号槽执行时所在的线程
1>. 直接连接 – 信号槽函数在信号发出者所在线程中执行
2>. 队列连接 – 信号在信号发出者所在线程中执行,槽函数在信号接收者所在线程中执行.
3>. 自动连接 – 多线程时为队列连接方式, 单线程时为直接连接方式
默认情况为自动连接方式.
五、内存
5.1、malloc与new在创建对象内存时的主要区别
答:new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会调用类的构造函数进行初始化类成员的工作,同样free也不会调用析构函数。
malloc函数的用法:void *malloc(int size);
注意:malloc只可以用来分配内存(分配的是虚拟内存,不是物理内存),还有void*并不表示返回空,这里表示需要程序员自行指定返回指针类型,是强制返回任何类型的指针,比如:int *p=(int *)malloc(size)。
https://blog.csdn.net/xiongchao99/article/details/74524807#t18
5.2、简述C,C++程序编译的内存分配情况?
解:C,C++中内存分配方式可以分为三种:
从静态存储区域分配:内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快,不容易出错,因有系统自行管理。
在栈上分配:在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
从堆上分配:即运态内存分配。程序在运行时候用malloc或new申请任意大小的内存,程序员自己负责在何进用free 和delete释放内存。
一个C、C++程序编译时内存分为5大存储区:堆区、栈区、全局区、文字常量区和程序代码区。
volatile
https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html
网友评论