c++基础
文章平均质量分 57
ChrisYoung1314
这个作者很懒,什么都没留下…
展开
-
C++ 学习路线推荐
相信有很大一部分学计算机的童鞋都是靠自学,即使本身是计算机专业的同学,也会觉得仅仅通过课堂上的学习是远远不够的,而且在上课时所用到的教材也不够好。然而自学的时候有个很大的问题就是找不到合适的方向和学习路线,我在刚开始的时候也吃过这样的亏,总是纠结于语言的学习,觉得编程就是学很多语言。然而单纯学习语言并不能解决问题,我们需要学习的是一个完整的体系,而编程语言只不过是其中一个解决问题的工具而已。后来我原创 2015-08-24 16:01:33 · 14709 阅读 · 2 评论 -
动态链接库和静态链接库的区别
本文我们学习和了解一下动态链接库和静态链接库的区别。 静态链接库(lib文件),将函数代码编译到应用程序中,应用程序运行时全部载入到内存。优点是不需要挂在dll文件,缺点是生成的应用程序比较大。 动态链接库(lib和dll文件),lib编译到应用程序中,实际函数代码写在dll中。在应用程序运行时,lib只是用来提供dll中函数的入门地址,所以需要把dll加载到进程空间,再通过l原创 2015-08-03 15:28:46 · 631 阅读 · 0 评论 -
malloc和new有什么区别
大家都知道malloc和new都是我们程序员自己申请内存空间,那它们有什么区别呢? 1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于mall原创 2015-08-06 09:42:06 · 535 阅读 · 0 评论 -
C++ 强制类型转换
C++中主要包含了四种强制类型转换,让我们来看看它们的区别和联系。 static_cast:这是最常见的一种强制转换了,在功能上基本和C风格的类型转换一样,含义也一样。允许执行任意的隐式转换和相反转换动作(即使它是不允许隐式的)。例如:应用到类的指针上,意思是它允许子类类型的指针转换为父类类型的指针(这是一个有效的隐式转换),同时也能够执行想敏感词作:转换父类为它的子类。原创 2015-08-06 09:03:10 · 496 阅读 · 0 评论 -
C++ 虚函数实现原理
首先,我们要明白虚函数的作用:简单讲就是实现多态。 基类定义了虚函数,子类可以重写该函数,当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态地调用属于子类的该函数,且这样的函数调用是无法在编译期间确认的,而是在运行期确认,也叫做迟绑定。 底层实现原理:先来看看C++对象模型 在此模型中,non static 数据成员被放置到对象内部,原创 2015-08-05 20:24:39 · 1253 阅读 · 0 评论 -
浅谈指针和引用
我们知道用指针和引用来定义函数形参的时候,都可以直接改变参的值。那么指针和引用有哪些区别呢? 我们先根据引用和指针的定义展开:引用是某个变量或者对象的别名,而指针则存储的是一个机器码地址,这个地址是某个具体变量或者对象的地址。因此区别有: 1)指针可以为空,但是引用不行 2)声明指针可以不指向任何对象,因此使用指针之前必须做判空操作,而引用则不必 3原创 2015-08-06 11:58:13 · 525 阅读 · 0 评论 -
C/C++ 中内存对齐问题
我们通过几个例子来全面搞懂c/c++中的内存对齐问题。来看看下面的结构体大小分别是多大?(假设均在32位机器上) struct A {char a;char b;char c;}; 这个相信大家都知道,由于变量都是char类型,对齐值为1,所以结构体大小为3。struct B {int a;char b;short c;}; 对齐值原创 2015-08-06 12:05:35 · 765 阅读 · 0 评论 -
define和inline关键字比较
这里我们学习一下define和inline关键字的用法,以及它们的区别。 define:定义预编译时处理的宏,只是简单的字符串替换,无类型检查。 inline:1、inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义,编译阶段完成。 2、内联函数要做类型安全检查,inline是指嵌入代码,在调用函数的地方不是跳转,而是把代码直接写到那里原创 2015-08-06 11:38:43 · 4666 阅读 · 0 评论 -
C++ const关键字的总结
本文我将总结const关键字的几个常见问题,让我们更加简单和全面的理解const关键字的作用和意义。 问题1:类的const成员变量怎么初始化? 解答:类中的const成员必须(只能)在构造函数的初始化列表中进行初始化。 问题2:类的const成员函数有什么作用? 解答:防止函数对成员变量值进行修改,毕竟我们有时候只是希望函数读取变量值,而不要改变它,那么你原创 2015-08-03 15:12:33 · 656 阅读 · 0 评论 -
使用cout输出小数时位数的控制方法
昨天刷360校招内推的笔试练习题,发现最后几道编程题都需要控制输出的格式,微信群和QQ群里面也有好多大神居然不会用cout控制输出格式,在网上搜了一下也没看到好的答案,看来这些基础的东西大家反而不怎么在意,但是我觉得这些知识又特别重要。所以进行一下总结。 保留小数点的功能需要包含iomanip头文件,并在输出数字前加上" 下面,我通过几个例子来说明,让大家彻底学会使用这些小技巧原创 2015-08-11 10:58:24 · 6291 阅读 · 1 评论 -
C++ 标准输入流总结
既然上一篇文章对标准输出流cout的格式化输出进行了总结,那么这篇文章就对c++的标准输入流用法进行全面总结。 以下是关于C++编程中cin的几个常见用法: 1. cin 用法1:最基本,也是最常用的用法,输入一个数字: #include using namespace std;int main(){ int a, b; cin原创 2015-08-11 11:22:21 · 5979 阅读 · 1 评论 -
智能指针的原理与设计
智能指针:实际指行为类似于指针的类对象 ,它的一种通用实现方法是采用引用计数的方法。下面我们来看看智能指针实现的原理和方法: 1.智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针; 2.每次创建类的新对象时,初始化指针并将引用计数置为1; 3.当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计原创 2015-08-10 20:22:02 · 825 阅读 · 0 评论 -
C++函数模板及实现原理
C++为我们提供了函数模板机制。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。 为什么要有函数模板 下面,我们就通过一个例子来说原创 2015-08-25 12:50:14 · 19618 阅读 · 4 评论 -
C++ 中的虚继承
首先我们要明白虚继承的作用:为了解决从不同途径继承来的同名数据成员在内存中有不同的拷贝造成数据不一致的问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样就不仅解决了二义性的问题,也节省了内存,避免了数据不一致的问题。举例如下: class CA{int k;public:void f() {co原创 2015-08-05 20:02:04 · 468 阅读 · 0 评论