第32课 初探C++标准库
有趣的重载:

实验:

将1左移到cout对象中。
将Test改名为Console,此时我们的本意是想让这个cout代表当前的命令行:

cout代表命令行的一个实例,本意是想将1打印到命令行上。
我们在重载函数中用printf打印:

运行结果如下:

可以看到1被打印出来了。
我们还可以重载输出字符:

运行结果如下:

改进重载函数:

这样第24行就实现了连续的传送。
将换行符定义成一个常量:

最终完善的程序:
#include <stdio.h> const char endl = '\n'; class Console
{
public:
Console& operator << (int i)
{
printf("%d", i); return *this;
}
Console& operator << (char c)
{
printf("%c", c); return *this;
}
Console& operator << (const char* s)
{
printf("%s", s); return *this;
}
Console& operator << (double d)
{
printf("%f", d); return *this;
}
}; Console cout; int main()
{
cout << << endl;
cout << "D.T.Software" << endl; double a = 0.1;
double b = 0.2; cout << a + b << endl; return ;
}
运行结果如下:

重载过后我们就可以使用console实例来输出了,而不用每一次都输入格式化字符串了。
C++标准库:
重复发明轮子并不是一件有创造性的事,站在巨人的肩膀上解决问题会更加高效。
上述的输出流对象已经在C++标准库中实现了。

C++标准库有一个子库,这个子库涵盖了C库的功能。
C++编译环境的组成:

C语言兼容库和C++标准库中的C库子模块功能是重复的,但是它们所包含的头文件是不一样的。
标准库的常用数据结构:

最右边一列就是C语言子库。为了兼容C语言编译器的库中所提供的功能。
C++标准库中的C库兼容:
我们在上面程序中使用的 #include <stdio.h>就是C兼容库,而不是C语言库,C兼容库是由编译器厂商提供的,不是标准库的一部分。
例:

这里包含的头文件既不是C++标准库,也不是C语言库,它是C++编译器厂商为了推广自己的产品而提供出来的C兼容库。
我们将C兼容库换成C++标准库中的C兼容模块:

这时就得打开std命名空间了。
运行结果如下:

C++标准库:

前辈们将显示器和键盘实现成了C++中的对象。
C++中的输入输出:
#include <iostream>
#include <cmath> using namespace std; int main()
{
cout << "Hello world!" << endl; double a = ;
double b = ; cout << "Input a: ";
cin >> a; cout << "Input b: ";
cin >> b; double c = sqrt(a * a + b * b); cout << "c = " << c << endl; return ;
}
运行结果如下:

小结:

第32课 初探C++标准库的更多相关文章
- 32,初探c++标准库
1. 有趣的重载 (1)操作符<<:原义是按位左移,重载“<<”可将变量或常量左移到对象中 重载左移操作符(仿cout类) #include<stdio.h> co ...
- c++标准库多线程入门
从c++ 11开始,语言核心和标准库开始引入了对多线程的原生支持.如下所示: int doSth(char c) { default_random_engine dre(c); uniform_int ...
- 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...
- C++标准库的初探
1,操作符 << 的原生意义是按位左移,例: 1 << 2; 其底层的意义是将整数 1 按位左移 2 位,即: 0000 0001 ==> 0000 0100: 2,重 ...
- 把《c++ primer》读薄(3-1 标准库string类型初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声 ...
- 16.C++-初探标准库
在别人代码里,经常看到std命名空间,比如使用std命名空间里的标准输入输出流对象cout: #include<iostream> using namespace std; int mai ...
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
- 把《c++ primer》读薄(3-3 标准库bitset类型)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. //开头 #include <bitset> using std::bitset; 问题1.标准库bitset类型( ...
- python标准库之字符编码详解
codesc官方地址:https://docs.python.org/2/library/codecs.html 相关帮助:http://www.cnblogs.com/huxi/archive/20 ...
随机推荐
- python 将16进制转化为2进制
>>> x='123abc' >>> b=bin())[:] >>> print(b)
- shell 字符串运算符
字符串运算符 下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg": 运算符 说明 举例 = 检测两个字符串是否相等,相等返回 ...
- [原][OSG]深入osg函数----SceneView::cull 函数
参考:最长一帧 先介绍几个类: osgUtil::CullVisitor:“筛选访问器” 当我们使用它遍历场景图形的各个节点时, CullVisitor 将会对每一个遇到的节点执行场景筛选的工作,判断 ...
- jq 命名空间
$('ul').on("click",function(){console.log('all');});$('ul').on("click.a",functio ...
- JS中Ajax的同步和异步
ajax同步 : 意味着此时请求Server后,JS代码不再继续执行,等待Server返回后才继续往下执行. ajax异步 : 意味着此时请求Server后,JS代码继续执行,不管Server什么时候 ...
- grub 启动错误 "file not found"
刚安装ubuntu 14.4 竟然出现这么尴尬的事,ubuntu 行不行? 幸好还是能从u盘启动后,转到硬盘. 然后在网上找到了解决方法. http://askubuntu.com/questions ...
- Yii 语言设置 中文提示信息
1. 在main.php配置文件中加入 'language'=>'zh_cn', 注: 在URL中追加参数lang=zh_cn即可实现中文 2. 在Controller方法中添加 publi ...
- codeforces 555a//Case of Matryoshkas// Codeforces Round #310(Div. 1)
题意:1-n的数字,大的在小的后面,以这种规则已经形成的几个串,现在要转为一个串,可用的操作是在末尾拆或添加,问要操作几次? 模拟了很久还是失败,看题解才知道是数学.看来这种只要结果的题,模拟很不合算 ...
- 在 Confluence 6 中连接一个 LDAP 目录
希望将 Confluence 连接到一个 LDAP 目录: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Configuration 链接. 在左侧的面板中单击 用户目录(User Di ...
- 『Sklearn』数据划分方法
原理介绍 K折交叉验证: KFold,GroupKFold,StratifiedKFold, 留一法: LeaveOneGroupOut,LeavePGroupsOut,LeaveOneOut,Lea ...