C++基础

作者: 阳光前 | 来源:发表于2018-08-09 10:40 被阅读0次

    参考:

    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

    相关文章

      网友评论

          本文标题:C++基础

          本文链接:https://www.haomeiwen.com/subject/ljaayftx.html