有趣的重载:

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

实验:

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

将1左移到cout对象中。

将Test改名为Console,此时我们的本意是想让这个cout代表当前的命令行:

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

cout代表命令行的一个实例,本意是想将1打印到命令行上。

我们在重载函数中用printf打印:

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

运行结果如下:

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

可以看到1被打印出来了。

我们还可以重载输出字符:

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

运行结果如下:

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

改进重载函数:

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

这样第24行就实现了连续的传送。

将换行符定义成一个常量:

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

最终完善的程序:

 #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 << << endl;
cout << "D.T.Software" << endl; double a = 0.1;
double b = 0.2; cout << a + b << endl; return ;
}

运行结果如下:

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

重载过后我们就可以使用console实例来输出了,而不用每一次都输入格式化字符串了。

C++标准库:

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

上述的输出流对象已经在C++标准库中实现了。

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

C++标准库有一个子库,这个子库涵盖了C库的功能。

C++编译环境的组成:

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

C语言兼容库和C++标准库中的C库子模块功能是重复的,但是它们所包含的头文件是不一样的。

标准库的常用数据结构:

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

最右边一列就是C语言子库。为了兼容C语言编译器的库中所提供的功能。

C++标准库中的C库兼容:

我们在上面程序中使用的 #include <stdio.h>就是C兼容库,而不是C语言库,C兼容库是由编译器厂商提供的,不是标准库的一部分。

例:

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

这里包含的头文件既不是C++标准库,也不是C语言库,它是C++编译器厂商为了推广自己的产品而提供出来的C兼容库。

我们将C兼容库换成C++标准库中的C兼容模块:

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

这时就得打开std命名空间了。

运行结果如下:

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

C++标准库:

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

前辈们将显示器和键盘实现成了C++中的对象。

C++中的输入输出:

 #include <iostream>
#include <cmath> using namespace std; int main()
{
cout << "Hello world!" << endl; double a = ;
double b = ; cout << "Input a: ";
cin >> a; cout << "Input b: ";
cin >> b; double c = sqrt(a * a + b * b); cout << "c = " << c << endl; return ;
}

运行结果如下:

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

小结:

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

05-11 21:45