C++标准库的初探
1,操作符 << 的原生意义是按位左移,例:
1 << 2;
其底层的意义是将整数 1 按位左移 2 位,即:
0000 0001 ==> 0000 0100;
2,重载左移操作符,将变量或常量左移到一个对象中;
3,重载左移操作符编程实验:
1,main.cpp 文件:
#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; // cout 代表一个命令行 Console 对象; int main()
{
cout << << endl;
cout << "D.T.Software" << endl; double a = 0.1;
double b = 0.2; cout << a + b << endl; return ;
}
2,输出结果:
1
D.T.Software
0.300000
3,说明:
1,如果进行了左移的重载之后,那么程序将产生神奇的变化,在 main() 中不用 printf() 和格式化字符串 '\n' 了,因为编译器会通过重载的机制会为我们选择究竟使用哪一个重载机制;
4,C++ 标准库:
1,重复发明轮子并不是一件有创造性的事,站在巨人的肩膀上解决问题会更加 有效;
1,以后在工程开发中,如果有好的想法,想要实现某些模块,在真正的动手之前,一定要查阅是否有前辈实现了这个方法,如果有,可以找来看看,如果满足需求,直接拿来用,如果不是,再拿来改写(你的软件);
2,现在巨人的肩膀就是前人开发的 C++ 标准库;
2,C++ 标准库并不是 C++ 语言的一部分;
1,各大厂商规定,只要发布一款编译器,就要随之发布一款标准库;
3,C++ 标准库是由类库和函数库组成的集合;
4,C++ 标准库中定义的类和对象都位于 std 命名空间中;
5,C++ 标准库的头文件都不带 .h 后缀;
6,C++ 标准库涵盖了 C 库的功能;
1,C 库是 C++ 标准库子库,为了兼容 C 语言;
5,C++ 编译环境的组成:

1,编译模块支持 C++ 标准语法和 C++ 扩展语法,扩展语法对不同的编译器是 不一样的、不通用的;
2,C 语言兼容库,看上去和用起来和 C 语言库是完全一样的,因为编译器厂商都希望自己的 C++ 编译器被最大程度的接受,因此直接提供一样的 C 语言头文件供开发者使用,目的是让编译器能够直接编译成功用户所写的 C 语言代码,仅仅是为了推广 C++ 编译器,这里的 C 语言兼容库和 C++ 标准库中的 C 库子模 块在功能上是重复的,但是包含的头文件不一样而已;
3,编译器扩展库是由编译器生产厂商定制的,因编译器不同而不同;
6,C++ 标准库预定义了多数常用的数据结构:
1,<bitset> <set> <map> <vector>
2,<deque> <list> <queue> <stack>
3,<cstdio> <cstring> <cstdlib> <cmath>
1,相当于 stdio.h string.h stdlib.h math.h;
2,C++ 标准库中的 C 库子模块;
3,这不是 C 语言兼容库;
7,C++ 标准库中的 C 库兼容编程实验:
1,main.cpp 文件:
#include <cstdio>
// #include <stdio.h> //这里包含的不是 C 语言库的头文件,这是 C++ 编译器提供的 C 语言兼容库的头文件,不是标准库的一部分,不用打开 std;
#include <cstring> // C++ 中的标准库文件,同时一定要打开 std 命名空间;
#include <cstdlib>
#include <cmath> using namespace std; int main()
{
printf("Hello world!\n"); char* p = (char*)malloc(); strcpy(p, "D.T.Software"); double a = ;
double b = ;
double c = sqrt(a * a + b * b); printf("c = %f\n", c); free(p); return ;
}
2,输出结果:
Hello world!
c = 5.000000
3,C 语言中是没有前六行的写法,意味着推出的 C++ 编译器附带的自由 C++ 标准库的时候,C 语言的代码只有更改头文件后才能够编译通过,意味着已经存在的这些 C 语言代码不能够被编译通过,因此使用 C++ 的用户肯定很少,因此 C++ 编译器厂商就提出来自己的 C 语言兼容库,在使用方式上和 C 库一样;
4,使用标准库一定要打开标注库:
1,using namespace std;
8,C++ 标准库:

1,前人根据面向对象思想,认为在现实中显示器有一个对象,键盘也是有一个对象,面向对象思想就是要将现实世界无缝的搬到计算机程序领域;
2,C++ 标准库中有一个全局对象 cout,用来表示显示器,有一个全局对象 cin,用来表示键盘;
9,C++ 中的输入输出:
1,main.cpp 文件:
#include <iostream>
#include <cmath> using namespace std; int main()
{
cout << "Hello world!" << endl; // cout 相当于命令行; double a = ;
double b = ; cout << "Input a: ";
cin >> a; // cin 重载右移操作符; cout << "Input b: ";
cin >> b; double c = sqrt(a * a + b * b); cout << "c = " << c << endl; return ;
}
2,输出结果:
Hello world!
Input a: 3
Input b: 4
c = 5
3,本节课后续所有输入输出采用 C++ 标准库,不在采用厂商提供的 C 兼容库;
10,小结:
1,C++ 标准库是由类库和函数库组成的集合;
1,没有 *.h 文件;
2,C++ 标准库包含经典算法和数据结构的实现;
3,C++ 标准库涵盖了 C 库的功能;
4,C++ 标准库位于 std 命名空间中;
C++标准库的初探的更多相关文章
- 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...
- 把《c++ primer》读薄(3-1 标准库string类型初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声 ...
- 16.C++-初探标准库
在别人代码里,经常看到std命名空间,比如使用std命名空间里的标准输入输出流对象cout: #include<iostream> using namespace std; int mai ...
- 第32课 初探C++标准库
有趣的重载: 实验: 将1左移到cout对象中. 将Test改名为Console,此时我们的本意是想让这个cout代表当前的命令行: cout代表命令行的一个实例,本意是想将1打印到命令行上. 我们在 ...
- 32,初探c++标准库
1. 有趣的重载 (1)操作符<<:原义是按位左移,重载“<<”可将变量或常量左移到对象中 重载左移操作符(仿cout类) #include<stdio.h> co ...
- Python标准库--typing
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...
- PHP SPL(PHP 标准库)
一.什么是SPL? SPL是用于解决典型问题(standard problems)的一组接口与类的集合.(出自:http://php.net/manual/zh/intro.spl.php) SPL, ...
- C 标准库系列之locale.h
locale.h 区域设置相关,主要针对时间日期.货币格式.字符控制.数字格式等以满足某区域的设置需要. locale设置类别主要包括以下几个宏定义的类别: LC_ALL:设置所有的类别: LC_CO ...
- C 标准库系列之errno.h
errno.h 提供了一个整数全局变量errno,当系统调用或者库函数的错误事件发生时可能会修改该值,指明错误的原因,该值可在任何需要的地方被修改:一般情况不为0的值表示出现了异常或者错误. errn ...
随机推荐
- JVM(14)之 类加载机制
开发十年,就只剩下这套架构体系了! >>> 从本篇博文开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要 ...
- Crash的数字表格(莫比乌斯反演)
Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b ...
- spring(五):spring中Aware接口的使用
spring中自定义组件需要使用spring的底层组件时,可以通过自定义组件实现相关XxxAware接口,重写其中的方法进而实现 例如:自定义一个组件,该组件中需要使用ApplicationConte ...
- js中Date的构造函数解读
javascript中的内置对象是我们经常会用到的,那么今天我们就来说说Date的四种构造方法吧 一.new Date() 这是我们最常使用也最熟悉不过的Date对象的构造方法了,通过无参数的构造函数 ...
- JS高级 — 函数的声明和表达式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- 导入excle到服务器时候删除服务器历史数据
//删除历史数据EXCLE 当天前一天的数据都删除 var folder = Path.GetDirectoryName(absFilePath); var files = Directory.Get ...
- smbstatus - 报告当前 samba 的联接状态
总览 smbstatus [-b] [-d] [-L] [-p] [-S] [-s configuration file] [-u username] 描述 此程序是 samba 套件的一部分. sm ...
- 关于linux的日志
日志的三种类型# 内核及系统日志: 这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置.系统中有相当 ...
- mangodb语句
{ field: { $exists: <boolean> } }
- linux下安装maven私服nexus
Nexus介绍 Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库 ...