1.有趣的重载
- 操作符<<的原生意义是按位左移,例: 1 << 2 ;
- 其意义是将整数1按位左移2位,即: 0000 0001 → 0000 0100
2.编程实验
- 重载左移操作符
#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; //使用endl替换'\n'
cout << "Hello World" << endl;
double a = 0.1;
double b = 0.2;
cout << a + b << endl;
getchar();
return 0;
}
- 运行结果:
3.C++标准库
- 很多时候程序设计不应该重复造轮子,而应该有效利用已有的实现
3.1 注意
- C++标准库并不是C++语言的一部分
- C++标准库是由类库和函数库组成的集合
- C++标准库中定义的类和对象都位于
std
命名空间中 - C++标准库的头文件都不带
.h
后缀 - C++标准库涵盖了C库的功能
3.2 C++编译环境的组成
- C++标准库预定义了多数常用的数据结构
- 右边c开头为C++标准库为C提供的子库,即C++标准库已经包含一个子库用来兼容C语言代码
3.3 编程实验
- C++标准库中的C库兼容
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
int main()
{
printf("Hello World!\n");
char *p = (char *)malloc(16);
strcpy(p, "Hello World");
double a = 3;
double b = 4;
double c = sqrt(a*a + b * b);
printf("c = %f\n", c);
free(p);
getchar();
return 0;
}
- C++中诸如stdio.h math.h…….为C++编译厂商为了推广自己产品而推出的C兼容库,不是标准C库
- 编译C代码就要改头文件的话,麻烦。。。。。
- 通过使用C兼容库,现有的C代码都可以被编译啦,编译器厂商就成功吸引用户啦!!!
3.4 C++中的输入输出
#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;
system("pause");
return 0;
}
- 运行结果:
4.总结
- C++标准库是由类库和函数库组成的集合
- C++标准库包含经典算法和数据结构的实现
- C++标准库涵盖了C库的功能
- C++标准库位于
std
命名空间中