前言
- c++实现好的cout是存在std这个命名空间中,本质上是一个对象,不是一个类型也不是一个方法!
代码
#include
#include
#define BEGINS(x) namespace x {
#define ENDS(x) } // namespace x
BEGINS(haizei)
class ostream {
public:
ostream& operator<<(int x);
ostream& operator<<(const char *x);
};
ostream& ostream::operator<<(int x) {
printf("%d",x);
return *this;
}
ostream& ostream::operator<<(const char *x) {
printf("%s",x);
return *this;
}
ostream cout;
ENDS(haizei)
int main(){
int n = 123, m = 456;
std::cout << n << " " << m; std::cout << std::endl;
haizei::cout << n << " " << m;std::cout << std::endl;
return 0;
}
- 此处为什么必须返回对象的引用?
- 如果没有返回对象的引用,是否可以像std::cout一样不间断输出?
后记
- c++包含四种编程范式:面向过程、面向对象、泛型编程、函数式编程;
- 但是,c语言也可以实现这些编程范式,只是利用c语言实现面向过程比用c语言实现其他几种范式容易一些。
- 请注意是否会有人说,比较绝对的说法:不能实现面向对象!
- c++中存在auto和decltype的类型推断,它们有什么区别?一般用在什么地方?