![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++11
记录C++11 编程知识
leon.liao
这个作者很懒,什么都没留下…
展开
-
面向对象思想 - 面向对象与if else语句
说明面向过程设计和面向对象设计的区别之一:是否在业务逻辑层使用冗余的if else判断,如果你还在大量使用if else,当然,界面表现层除外,即使你使用Java/C#这样完全面向对象的语言,也只能说明你的思维停留在传统的面向过程语言上。个人理解上面的话是在解道技术博客上摘录的,相信在很多博客上有说明,但是大部分没有描述清晰,至少我一时没理解。首先面向对象设计不是完全干掉if else语句,只是尽可能的减少冗余的if else语句,不可能完全不使用,判断是编程的基础元素,如果完全不需要使用,面原创 2020-05-22 21:32:39 · 528 阅读 · 0 评论 -
基础概念 - 重载(overload),隐藏,覆盖和重写(override)
说明重载(overload),隐藏,覆盖和重写(override)几个概念容易混乱,特记录下。类内部重载(overload)重载是在一个域中,函数名称相同但是函数参数不同, 为了实现一个函数名支持多种的行为。重载和继承关系无关,存在于类内部。详细说明略。继承关系中的父类和子类隐藏和覆盖描述的对象不仅仅是父类和子类中的同名函数也包含同名变量,同名变量简单点,隐藏和覆盖是对应的,而同名函数隐藏和覆盖却不一定对应。隐藏/覆盖隐藏和覆盖是站在用户的角度,以命名为唯一标识,只要父类和原创 2020-07-25 14:01:20 · 240 阅读 · 0 评论 -
语法基础 - io - 基本输入输出
说明输入操作:字节数据从设备(如键盘、磁盘驱动器、网络连接等)流向内存。输出操作:字节数据从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等)。C/C++对比C++采用字节序列流的方式,相对于C语言,流的方式更通用,但是性能会差点。通用:不同于C语言,数据类型基本上是固定的,C++可以自定义类,当输出类类型时,例如:输出string类型数据,使用c方式printf你不知道该使用%s,还是其它格式,其它自定义类型更无法逐一定义。性能下降的原因:C/C++都是通过封装系统接口实现的,原创 2020-06-15 20:25:30 · 380 阅读 · 0 评论 -
基础语法 - 泛型编程 - 模板
泛型编程泛型编程是指程序员可以以一种独立于任何特定数据类型的数据操作方式编写算法。模板模板是泛型编程的基础,是创建具体泛型类或函数的蓝图和公式。实现原理模板机制是一种语法糖,通过编译器根据模板创建具有的函数和类实例,编译器处理如下:编译模板本身时, 检查语法信息。使用模板时,检查参数类型是否匹配,数目正确与否;对模板实例化时,进行实参推断。生成具体的函数或类实例。调用具体的实例例如:* 模板定义template <typename T>//先声明模板原创 2020-05-30 16:36:35 · 162 阅读 · 0 评论 -
基础语法 - 引用
定义引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字,一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。引用和指针上面是引用的常见定义,虽然很好理解,但是初次接触以及实际使用时很容易令人产生困惑:“引用与指针是什么关系?C++既支持指针也支持引用那么实际编程中什么情况下应该使用引用,什么情况下应该使用指针?”个人理解指针是计算机中真实存在的原始元素,而引用是对指针的抽象元素。引用的底层实现其实也是指针,但是引用是指针的抽象概念,抽象出引用的目的是避免指针原创 2020-05-26 21:04:30 · 137 阅读 · 0 评论 -
基础语法 - 友元
说明为了实现数据的隐藏,时常将数据设置为类的私有成员,但是私有成员只能在类内部访问,如果想在别处访问对象的私有成员,只能通过类提供的public接口间接地访问;这固然能够带来数据隐藏的好处,但也会增加代码书写的麻烦。友元的作用就是 将函数或类设置成某个类的友元,并且能够访问该类的所有成员包括私有成员和受保护成员,以解决上面提到的问题。编程时为了方便访问,有时会将类的私有数据设置成 public,这破坏了数据的隐藏性,是个不好的编程习惯。与java比较java不支持友元,思想是:私有成员不能直原创 2020-05-13 21:24:13 · 247 阅读 · 0 评论 -
基础语法 - 命名空间和作用域标识符
命名空间简介命名空间是由用户定义命名的作用域空间,常用来处理同名冲突以及其它问题,例如:某个代码文件中定义了一个函数,可能在别的文件中有同名的函数,链接时就会出错,可以加上static来限制,但是如果别的文件中需要使用到函数就不好控制了。为了避免命名冲突,实现一个库时一般会给函数名手动加上库名,因为担心别的文件中也定义了同样的函数名,如果使用命名空间就方便很多。命名空间作用:将代码分类封装和隔离。实现原理:编译时编译器会自动给命名空间中的函数和变量加上空间名处理后的特殊字符。使用原创 2020-05-12 19:34:33 · 669 阅读 · 0 评论 -
基础语法 - 空指针
引子早期c++编程中定义空指针我们会使用NULL,如下:int *p = NULL;但是在函数重载时会出问题的,示例代码如下:#include <iostream>#include <string>using namespace std;void func(int* num){ cout << "this is the ptr function..." << endl;}void func(int num){原创 2020-05-08 20:38:13 · 162 阅读 · 0 评论 -
面向对象 - 继承控制final和重写控制override
说明从C++11开始支持override和final关键词。finalfinal的英文意思是:adj.最终的;最后的;(指结果)最终的;决定性的;不可改变的在C++作用类似,可以修饰类,结构体和函数,修饰类和结构体表示禁止继承该类,对于函数表示禁止重写该函数。final 类将类标记为final,继承该类会导致编译错误。class A final { //......原创 2020-05-07 20:44:55 · 112 阅读 · 0 评论 -
面向对象 - 多态
定义多态性可以简单地概括为:具有继承关系的一个对象可能有多种状态,原因是:一个函数接口,父类子类有多个实现,意思是:具有继承关系的一个对象在调用一个函数时可能有多种状态(父类与子类),可能调用的是不同的函数,产生不同的结果。分类多态分为:编译时多态和运行时多态。编译时多态class A:{public: void test(){ cout <<...原创 2020-04-23 20:54:11 · 154 阅读 · 0 评论 -
环境准备 - c和c++混合编程
说明c++语言是c语言的升级版本,是基于C语言开发的,并且兼容C语言,在工作中很多时候需要C和C++混合开发,来充分利用两种语言的优势。混合开发时C++语言可以利用现有的c库,以节省开发时间;c语言也可以使用c++的新特性,来实现一些复杂的应用,例如:c++中有现成的一些容器(红黑树等),实际应用中经常需要使用到,没必要使用c再实现一套。注意点c++为了实现函数重载,编译时对函数名进...原创 2020-04-02 21:26:06 · 141 阅读 · 0 评论 -
新特性 - 类型推导
说明类似于动态语言,C++11支持自动类型推导。autoauto在早期C++中的标识临时变量,由于使用极少且多余,在C++11中已被用作类型推导使用。auto自动类型推断,用于从初始化表达式中推断出变量的数据类型,可以简化我们的编程工作。使用map<int, map<int,int> > map;map<int, map<int,int&g...原创 2020-04-02 21:08:11 · 165 阅读 · 1 评论 -
环境准备 - 由C转向C++
说明在公司使用C语言做嵌入式应用多年,C++只是大学老师教过一年,工作后从未再使用过C++,对于C++的印象依然停留在早期C++,近年开始使用C++编程,从C转向C++需要做些改变。改变需要理解和遵从C++思维方式,而不是C思维方式。C语言开发效率不高的原因有一点:内存管理较为原始,需要程序员比较细心和花费大量精力;C++等高级语言为了加快开发效率,大多数内存都是自动管理,自动动...原创 2020-03-23 20:12:53 · 325 阅读 · 0 评论