闲话少说,学习一下面向对象的编程,之前多次学习c++,多次半途而废。希望这一次能坚持下来。每天能有一点更新。
先来一段简单的代码,和c语言是不是有一些不一样呢。对于iostream,namespace,cout,endl.我们一个一个解释
#include <iostream>
int main()
{
using namespace std;
cout << "hello world";
cout <<endl;
cout <<"i am coming, c++" << endl;
return 0;
}
c++的头文件与c的头文件相比,去掉了扩展名.h。要使用cout,cin进行输入输出的程序必须包含iostream文件。除了扩展名的区别外,更大区别则是c++中的名称空间的概念。
名称空间
名称空间支持是c++中一项较新的特性,他是为了使编写将多个厂商已有的代码更简单而设计的。假如有封装好的两个产品,都包含一个名称为wanda()的函数,这样,在使用这个函数的时候,编译器就不知道使用那个版本。名称空间让厂商可以将产品封装在一个叫做名称空间的单元中,这样就可以使用名称空间的名称来指出想要使用哪个厂商的产品。microsoft可以将其定义放到一个名为Microsoft的名称空间,苹果公司将其定义放到一个名称Apple的名称空间中。这样wanda()函数的全称就是Microsoft::wanda();苹果公司的版本则是Apple::wanda().程序就可以使用名称空间来区分不同的版本了。
Microsoft::wanda(“hello Microsoft”);
Apple::wanda(“hello Apple”);
另外名称空间只有在头文件没有.h的扩展名时才有。有的老版本的c++还是有.h的扩展名的。
在上面的例程代码中,在iostream中的定义的,用于输出的cout变量实际上是std::out,而endl是std:endl.因此可以省略using编译指令,以下面这种方式进行编码
#include <iostream>
int main()
{
// using namespace std;
std::cout << "hello world";
std::cout <<std::endl;
std::cout <<"i am coming, c++" << std::endl;
return 0;
}
使用using编译器指令,可以指定使用哪一个名称空间,而不必添加前缀。
using namespace std
这个using编译器指令使得std名称空间中的所有名称都可以使用。这是一种偷懒的方法,更好的方法是,只使用所需的名称即可。如
using std::cout
using std:endl
用这些编译器指令后,在使用cout,endl,不用加std的前缀
#include <iostream>
int main()
{
// using namespace std;
using std::cout;
using std::endl;
cout << "hello world";
cout <<endl;
cout <<"i am coming, c++" << endl;
return 0;
}
上面几种case输出的结果是
代码中的cout,endl是什么东东呢?
简单说,cout相当于c语言中我们常用的printf
在代码:
cout << "hello world"
cout是一个对象
<< 是一个操作符
hello world是字符串
“<<” 刚看到的时候,咦,这不是左移吗?的确它确实是左移的意思,但是在这里是一个操作符,可以理解成数据的流向,表示数据流向了cout,也就是输出到了屏幕上。我们还会看到cin >> value,表示将屏幕上的输入赋值给value变量。>> 它既可以作为左移,又可以作为指向流向的操作符,这就是也给操作符重载的例子。通过重载,通过一个操作符将有不同的含义。编译器通过上下文判断操作符的具体含义。c语言中其实也有类似的例子,例如 &既可以表示AND为操作,也可以表示取地址。c++扩展了操作符重载的概念,用户自己也同样可以定义操作符的含义。
endl是换行的意思,相当于\n,当然,我们是可以继续使用\n这种换行的方式的。