第32课 - 初探 C++ 标准库
1、有趣的重载
操作符<<的原生意义是按位左移,例:
1 << 2 ;
其意义是将整数1按位左移2位,即:0000 0001 → 0000 0100
重载左移操作符,将变量或常量左移到—个对象中!
2、编程实验
重载左移操作符 32-1.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;
- int main()
- {
- cout << 1 << endl; //返回引用的原因
- cout << "Nyist" << endl;
- double a = 0.1;
- double b = 0.2;
- cout << a + b << endl;
- return 0;
- }
3、C++标准库
重复发明轮子并不是—件有创造性的事,
站在巨入的肩膀上解决问题会更加有效!
C++标准库并不是C++语言的—部分
C++标准库是由类库和函数库组成的集合
C++标准库中定义的类和对象都位于std命名空间中
C++标准库的头文件都不带.h后缀
C++标准库涵盖了C库的功能
C++编译环境的组成
C++标准库预定义了多数常用的数据结构
右边为C++标准库为C提供的子库
即C++标准库已经包含一个子库用来兼容C语言代码
4、编程实验
C++标准库中的C库兼容 32-2.cpp
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <cmath>
- using namespace std; //使用C++标准库
- int main()
- {
- printf("Hello world!\n");
- char* p = (char*)malloc(16);
- strcpy(p, "Nyist");
- double a = 3;
- double b = 4;
- double c = sqrt(a * a + b * b);
- printf("c = %f\n", c);
- free(p);
- return 0;
- }
C++中诸如stdio.h math.h…….为C++编译厂商为了推广
自己产品而推出的C兼容库,不是标准C库
编译C代码就要改头文件的话,麻烦。。。。。
通过使用C兼容库,现有的C代码都可以被编译啦
编译器厂商就成功吸引用户啦!!!
5、编程实验
C++中的输入输出 32-3.cpp
- #include <iostream>
- #include <cmath>
- using namespace std;
- int main()
- {
- cout << "Hello world!" << endl;
- double a = 0;
- double b = 0;
- cout << "Input a: ";
- cin >> a;
- cout << "Input b: ";
- cin >> b;
- double c = sqrt(a * a + b * b);
- cout << "c = " << c << endl;
- return 0;
- }
6、小结
C++标准库是由类库和函数库组成的集合
C++标准库包含经典算法和数据结构的实现
C++标准库涵盖了C库的功能
C++标准库位于std命名空间中