有趣的重载:
实验:
将1左移到cout对象中。
将Test改名为Console,此时我们的本意是想让这个cout代表当前的命令行:
cout代表命令行的一个实例,本意是想将1打印到命令行上。
我们在重载函数中用printf打印:
运行结果如下:
可以看到1被打印出来了。
我们还可以重载输出字符:
运行结果如下:
改进重载函数:
这样第24行就实现了连续的传送。
将换行符定义成一个常量:
最终完善的程序:
#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 ;
}
运行结果如下:
重载过后我们就可以使用console实例来输出了,而不用每一次都输入格式化字符串了。
C++标准库:
重复发明轮子并不是一件有创造性的事,站在巨人的肩膀上解决问题会更加高效。
上述的输出流对象已经在C++标准库中实现了。
C++标准库有一个子库,这个子库涵盖了C库的功能。
C++编译环境的组成:
C语言兼容库和C++标准库中的C库子模块功能是重复的,但是它们所包含的头文件是不一样的。
标准库的常用数据结构:
最右边一列就是C语言子库。为了兼容C语言编译器的库中所提供的功能。
C++标准库中的C库兼容:
我们在上面程序中使用的 #include <stdio.h>就是C兼容库,而不是C语言库,C兼容库是由编译器厂商提供的,不是标准库的一部分。
例:
这里包含的头文件既不是C++标准库,也不是C语言库,它是C++编译器厂商为了推广自己的产品而提供出来的C兼容库。
我们将C兼容库换成C++标准库中的C兼容模块:
这时就得打开std命名空间了。
运行结果如下:
C++标准库:
前辈们将显示器和键盘实现成了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 ;
}
运行结果如下:
小结: