首页 > 代码库 > 第32课 - 初探C++ 标准库

第32课 - 初探C++ 标准库

第32课 - 初探C++ 标准库

1. 有趣的重载

  操作符 << 的原生意义是按位左移,例: 1  <<  2 ; 

  其意义是将整数 1 按位左移 2 位,即: 0000 0001   ->    0000 0100

  重载左移操作符,将变量或常量左移到一个对象中!

技术分享
 1 #include <stdio.h>
 2 
 3 const char endl = \n;
 4 
 5 class Console
 6 {
 7 public:
 8     Console& operator << (int i)
 9     {
10           printf("%d", i);
11           return *this;
12     }
13     
14         Console& operator << (char c)
15     {
16           printf("%c", c);
17           return *this;
18     }
19     
20     Console& operator << (const char* s)
21     {
22           printf("%s", s);
23           return *this;          
24     }
25     
26         Console& operator << (double d)
27     {
28           printf("%f", d);
29           return *this;          
30     }
31 };
32 
33 Console cout;
34 
35 int main()
36 {
37     cout << 1 << endl;               //1
38     cout << "Hello World!" << endl;  //Hello World!
39     
40     double a = 0.1;
41     double b = 0.2;
42     
43     cout << a + b << endl;          //0.300000
44 
45     return 0;
46 }
重载左移操作符(仿cout类)  //这个例子很微妙,需要仔细揣摩体会

2. C++ 标准库

  重复发明轮子并不是一件有创造性的事情,站在巨人的肩膀上解决问题会更加有效!

  (1)C++ 标准库并不是C++ 语言的一部分

  (2)C++ 标准库是由 类库 和 函数库 组成的集合

  (3)C++ 标准库中定义的类和对象都位于 std 命名空间中

  (4)C++ 标准库的头文件都不带 .h 后缀

  (5)C++ 标准库涵盖了 C 库的功能

3. C/C++库

3.1 C++ 编译环境的组成

技术分享

  (1)C语言兼容库:头文件带.h,是C++编译器厂商推广自己的产品,而提供的C兼容库(不是C++标准库提供的,也不是C库提供的

  (2)C++ 标准库:如string、cstdio(注意,不带.h)是C++标准库提供的。使用时要用using namespace std找开命名空间

  (3)C++标准库中的C库和 C语言兼容库 在功能上相同,但是两者隶属于不同的模块,使用的头文件不同

  (4)不同厂商提供的C++编译器,C++ 扩展语法模块和编译器扩展模块各不相同

3.2 C++ 标准库预定义的常用数据结构

  (1)常用的数据结构类:<bitset>、<set>、<deque>、<stack>、<list>、<vector>、<queue>、<map>

  (2)<cstdio>、<cstring>、<cstdlib>、<cmath> (C++标准库提供的C兼容库!

技术分享
 1 /*
 2 //C++编译商提供的C兼容库(既不是C++标准库提供的,也不是C语言库文件,而是一种兼容库)
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include <stdlib.h>
 6 #include <math.h>
 7 */
 8 
 9 //C++标准库提供的C兼容库
10 #include <cstdio>
11 #include <cstring>
12 #include <cstdlib>
13 #include <cmath>
14 
15 using namespace std; //位于std命名空间中
16 
17 int main()
18 {
19     //以下的代码是使用C++标准库提供的C兼容库写的,
20     //从形式上看,与C代码写的完全一样,这就是C++
21     //为C提供了很好的支持的例子!
22     printf("hello world!\n");
23     
24     char* p = (char*)malloc(16);
25     
26     strcpy(p, "");
27     
28     double a = 3;
29     double b = 4;
30     double c = sqrt(a * a + b * b);
31     
32     printf("c = %f\n", c);
33     
34     free(p);
35 
36     return 0;
37 }
C++标准库中的C库兼容(如cstdio)

4. C++输入输出

  技术分享

技术分享
 1 #include <iostream> //使用C++标准库的输入输出
 2 #include <cmath>
 3 
 4 using namespace std; //位于std命名空间中
 5 
 6 int main()
 7 {
 8     cout << "Hello world!" << endl;
 9     
10     double a = 0;
11     double b = 0;
12     
13     cout <<"Input a:";
14     cin >> a;
15     
16     cout <<"Input b:";
17     cin >> b;
18     
19     double c = sqrt(a * a + b * b);
20     
21     cout << "c = "<< c << endl;
22 
23     return 0;
24 }
C++中的输入输出

5. 小结

  (1)C++ 标准库是由 类库函数库 组成的集合

  (2)C++ 标准库包含经经典算法  数据结构 的实现

  (3)C++ 标准库涵盖了C库的功能

  (4)C++ 标准库位于 std 命名空间中

 

第32课 - 初探C++ 标准库