1,操作符 << 的原生意义是按位左移,例:
1 << 2;
其底层的意义是将整数 1 按位左移 2 位,即:
0000 0001 ==> 0000 0100;
2,重载左移操作符,将变量或常量左移到一个对象中;
3,重载左移操作符编程实验:
1,main.cpp 文件:
1 #include <stdio.h> 2 3 const char endl = ' '; 4 5 class Console 6 { 7 public: 8 Console& operator << (int i) 9 { 10 printf("%d", i); 11 12 return *this; 13 } 14 Console& operator << (char c) 15 { 16 printf("%c", c); 17 18 return *this; 19 } 20 Console& operator << (const char* s) 21 { 22 printf("%s", s); 23 24 return *this; 25 } 26 Console& operator << (double d) 27 { 28 printf("%f", d); 29 30 return *this; 31 } 32 }; 33 34 Console cout; // cout 代表一个命令行 Console 对象; 35 36 int main() 37 { 38 cout << 1 << endl; 39 cout << "D.T.Software" << endl; 40 41 double a = 0.1; 42 double b = 0.2; 43 44 cout << a + b << endl; 45 46 return 0; 47 }
2,输出结果:
1
D.T.Software
0.300000
3,说明:
1,如果进行了左移的重载之后,那么程序将产生神奇的变化,在 main() 中不用 printf() 和格式化字符串 ' ' 了,因为编译器会通过重载的机制会为我们选择究竟使用哪一个重载机制;
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 文件:
1 #include <cstdio> 2 // #include <stdio.h> //这里包含的不是 C 语言库的头文件,这是 C++ 编译器提供的 C 语言兼容库的头文件,不是标准库的一部分,不用打开 std; 3 #include <cstring> // C++ 中的标准库文件,同时一定要打开 std 命名空间; 4 #include <cstdlib> 5 #include <cmath> 6 7 using namespace std; 8 9 int main() 10 { 11 printf("Hello world! "); 12 13 char* p = (char*)malloc(16); 14 15 strcpy(p, "D.T.Software"); 16 17 double a = 3; 18 double b = 4; 19 double c = sqrt(a * a + b * b); 20 21 printf("c = %f ", c); 22 23 free(p); 24 25 return 0; 26 }
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 文件:
1 #include <iostream> 2 #include <cmath> 3 4 using namespace std; 5 6 int main() 7 { 8 cout << "Hello world!" << endl; // cout 相当于命令行; 9 10 double a = 0; 11 double b = 0; 12 13 cout << "Input a: "; 14 cin >> a; // cin 重载右移操作符; 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 }
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 命名空间中;