- 博客(14)
- 资源 (24)
- 收藏
- 关注
原创 C++11新特性(57)- final说明符
个人以为,C++之所以适合架构设计,很大一个原因就是它可以对将来编程。比如可以通过public/protected/private来限定派生类对基类成员的访问,可以定义抽象类要求派生类必须实现的接口等。 当我们声明/定义了一个虚函数时候,派生类可以选择覆盖这个虚函数,也可以选择不覆盖。关于这一点,C++也提供了必要的方法,来要求派生类覆盖某些方法,这也可以看作是一种对将来编程。 纯...
2018-07-31 20:34:47 596
原创 C++11新特性(56)- override说明符
多态和虚函数 多态是C++的重要特征之一,同时也是初学者比较难理解的特征。先来看一个简单的例子: 代码很简单,按照作者自己的话描述一下上述代码中多态从定义到起作用的要点,应该不会再简单了,从main函数看起: 基类的指针 指向派生类的对象 派生类覆盖了基类中定义的虚函数 这三点是必要条件,缺一不可。 上面的代码还有另外一些有有意...
2018-07-31 15:06:52 552
原创 C++11新特性(55)- explicit类型转换运算符
为了想出本文中这个和C++Primer书中不同的,更加有意义的例子,作者花费了不少心思,请大家务必认真理解。类型转换运算符看下面的例子: 这时一个复数类的雏形,定义了一个double类型的类型转换运算符。有了它以后,可以像下面这样使用:输出结果如下: complex不支持输出运算符,所以编译器努力将c1转换成double类型以后输出。到目前为止...
2018-07-25 20:20:50 1554 2
原创 C++11新特性(54)- function类模版
函数指针是C语言中算是比较困难的内容之一,C语言实现的高级功能很多都离不开函数指针构成的列表。进入C++之后首先是引入了函数对象,接着C++11又引入了lamda表达式和参数绑定。 上述4种技术有一个共同的特征,即都可以对其使用调用运算符,C++称之为可调用对象。可调用对象虽然有着共同的调用模式,但是却分别属于完全不同的类型。如果需要组织一个可调用对象的列表(或其他数据结构),就需要一种共...
2018-07-24 20:17:55 465
原创 C++11新特性(53)- 引用限定成员函数
曳光弹类 根据需要的不同,代码也会有所不同。代码除了实现了,构造函数、析构函数以外,还 实现了setText和output两个方法用于修改内容和输出内容 重载了+=运算符和+运算符用于对象连接 参照代码 作为后面内容的铺垫,考虑下面的代码: 代码中生成了t1,t2连个实例,然后将二者相加并输出。值得注意的是:t1+t2的结果并没...
2018-07-23 20:50:21 973
原创 C++11新特性(52)- 移动迭代器
劳苦功高的曳光弹类 为了说明移动迭代器还是继续请出曳光弹类:类本身很简单,就是在各个构造函数,赋值运算符输出log信息。 移交单个数据 效率最低的方式 代码:程序输出: 可以看出,执行了两次构造函数和一次赋值运算。通过观察代码可以看出,拷贝动作发生了两次。 通过移动来提高效率 我们当然可以通过调用拷贝构造函数来...
2018-07-19 20:39:37 1499
原创 C++11新特性(51)- 移动构造函数通常应该是noexcept
不会抛出异常的移动构造函数 拷贝构造函数通常伴随着内存分配操作,因此很可能会抛出异常;移动构造函数一般是移动内存的所有权,所以一般不会抛出异常。 C++11中新引入了一个noexcept关键字,用来向程序员,编译器来表明这种情况。 noexcept函数 对于永远不会抛出异常的函数,可以声明为noexcept的。这一方面有助于程序员推断程序逻辑,另一方面编译...
2018-07-18 20:50:32 3997 2
原创 C++11新特性(50)- 移动构造函数和移动赋值
上一篇文章中,通过用移动string对象代替拷贝string对象,大大提高了程序的运行速度。其实对于我们自己写的类也可以适用同样的方式,前提是这些类实现了移动构造函数和移动赋值运算符。 移动构造函数 首先看通常的拷贝构造函数: 拷贝构造函数中实现了深拷贝处理。再看移动构造函数:代码构造和拷贝构造函数类似,但是内存的处理不是拷贝而是转移。注意参数类型是右...
2018-07-17 20:25:14 25754 4
原创 C++11新特性(49)- 用移动类对象代替拷贝类对象
string类是C++标准库中一个很重要的类,使用非常方便。但是它存在一个问题:无论是否需要,拷贝构造函数和赋值运算符都会生成文字列的拷贝。 C++11中引入了右值引用和移动的概念,使得程序员可以在构造,赋值的的时候可以选择拷贝还是移动对象,从而大幅度提高程序运行的效率。 示例 代码分别使用string的拷贝构造函数,赋值运算符的拷贝版本和移动版本进行比较。 ...
2018-07-16 20:54:13 1001 2
原创 C++11新特性(48)- 使用=delete阻止拷贝类对象
上一篇文章说的是,如果编译器没有生成默认构造函数或拷贝控制函数,可以使用=default要求编译器生成;同样地,有时我们也会希望某些函数函数不要被调用,这时可以使用=delete修饰该函数。单例模式的例子例如在Singleton设计模式中就希望类的对象只能通过getInstance静态方法得到。在C++11发布之前,类是通过将其拷贝构造函数和赋值运算符私有化来实现的。先看代码createInsta...
2018-07-14 15:50:26 5042
原创 C++11新特性(47)- 将=default用于拷贝控制成员
本文中的内容有的可以从C++的经典书籍中找到根据,有的是作者的理解。将些内容结合在一起,作者希望可以对这个问题有一个完整的表述:知其然,还要知其所以然。编译器自动生成的操作有一定经验的C++程序员都会知道,C++编译器会自动生成一些默认操作:1.默认构造函数2.析构函数3.拷贝构造函数4.赋值运算符5.移动构造函数6.移动赋值运算符这些操作被分为两组:默认构造函数自己为一组,其他的5个为一组。如果...
2018-07-12 18:22:17 825
原创 C++11新特性(46)- allocator::construct可使用任意构造函数
一般来说,C++中根据需要逐个构建对象的情况比较多。例如我们有下面的Tracer(曳光弹)类:这个类只是在构造函数,析构函数中输出了表示构造函数和析构函数被执行的字符串。之所以叫曳光弹,是希望通过它确认对象构建和销毁的过程,其作用就像曳光弹一样。构建,销毁对象的代码如下:以下是输出结果,和我们预想的结果一样,构造函数,析构函数各被调用一次。如果希望同时创建、销毁多个对象,可以使用如下代码:以下输出...
2018-07-04 20:08:41 7644
原创 C++11新特性(45)- 和动态数组相关的新特性
我们通常称使用new T[]形式分配的内存为动态数组,C++11中包含一些和动态数组相关的特性。使用初始化列表初始化可以像一般的数组一样,使用初始化列表对动态数组进行初始化,代码如下:毕竟不是数组之所以叫动态数组,我猜有两个原因,一个是它的内存是动态分配的,一个就是它可以像数组一样使用:但是动态数组和数组还是有一些区别,例如编译器无法从数组名获知数组的大小信息。下面的代码就不能正确动作: 同样地,...
2018-07-03 19:57:19 2447
原创 C++11新特性(44)- shared_ptr/weak_ptr示例
通过前面的五篇文章,相信各位已经对只能指针有了一个大致的了解。本文趁热打铁,通过一个实例介绍shared_ptr和weak_ptr配合使用以后,给程序带来的变化。实例背景先看下面的类图:这是一台台式电脑的静态建模。DesktopPC有四个部分组成:主机,键盘,鼠标和显示器。这一部分是聚合关系的体现。由于各个设备信息输出的需求,1.键盘和鼠标需要向主板报告用户输入信息,所以也管理着主板信息;2.主板...
2018-07-02 20:20:13 1212
Aduino UNO D1 R32 硬件包
2020-03-15
[Android应用开发记录-字幕播放器(5)完善]附属工程,源码
2011-09-07
Android应用开发记录-字幕播放器(5)完善附带工程,源码
2011-09-07
LyricPlayer for Android 2.1
2011-09-03
Android应用开发记录-字幕播放器(4)完成
2011-08-28
Android下的原创小游戏-九宫格
2011-08-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人