C++的开始以及从C到C++的过渡
如果在学习C++之前,有学过C语言的,可以知道C++是兼容C的语法规则的。
(一)C过渡到C++。
C++是在C语言的基础进行扩展的。其在C的基础上,增加了类的概念,并引入了引用,重载,多态的理念,使面向过程的C语言进步到面向对象的C++语言。同时C++语言完美兼容了C语言。
#include<iostream>
using namespace std;
int main()
{
printf("C ::Hello World\n");
cout << "CPP::Hello World" << endl;
return 0;
}
可以发现C++是兼容C语言的。这段代码没有包含C语言printf标准输出函数的头文件 #include<stdio.h> 但用C的语法也正常的打印出了字符串。
上面的两行输出代码printf 和 cout 分别是 C和C++的标准输出。
(二)C和C++一些的不同。
通过各种类型不同的变量来观察printf 和 cout 的区别:
#include<iostream>
using std::cout;
using std::endl;
int main()
{
int i = 10;
double d = 8.88;
char c = 'a';
//C
printf("%d\n",i);
printf("%lf\n",d);
printf("%c\n",c);
//C++
cout << i << " " << typeid(i).name() << endl;
cout << d << " " << typeid(d).name() << endl;
cout << c << " " << typeid(c).name() << endl;
//typeid().name()可以识别C++变量的类型
return 0;
}
可以发现,C++的 cout 可以自动识别出变量的类型,不需要像printf 那样还需要标明是什么格式打印才可以输出变量。C++的输出是用“流”(stream)的方式实现的。这就不需要个人去判断变量是什么类型的了。这是极其方便的。
这里的cout 是C++中iostream的类型对象,是库里面的,<< 重载输出运算符。
#include<iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
cout << "n=" << n << endl;
return 0;
}
这里的cin 是一个C++标准的输入流对象,使用右移运算符 “>>” 从设备键盘取得数据,送到输入流对象cin中,然后送到内存,cin也是的。>> 是重载输入运算符。
(三)C++的命名空间。
命名空间:
如果想使用cout ,cin 和 endl 我们要使用这么一行代码。叫命名空间。
using namespace std;
这行代码叫做命名空间。std是在C++是标准的意思。
如果在代码中没有写using namespace std;就要加上std和::这个域操作符。
std::cout;
std::cin;
std::endl;
std::cout是标准输出。
std::cin是标准输入。
std::endl是一行输出结束,然后输出下一行。作用:将换行符写入输出流,并将与设备关联的缓冲区的内容刷到设备中,保证目前为止程序所暂存的所有输出都真正写入输出流。
(1)自己也可以创造命名空间
#include<iostream>
namespace mvp
{
int rand = 0;
}
int main()
{
std::cout << mvp::rand << std::endl;
std::cout << rand << std::endl;
return 0;
}
可以发现,如果是用自己的命名空间的变量,输出的是自己的初始化。如果没有用则会在全局变量找,输出库里面的rand。
(2)为什么会使用到命名空间
命名空间是C++的一个特性,使用命名空间可以在编写大型程序或者多人多厂商编写程序组合的时候可以没有命名的冲突,造成重定义。**(编写大型程序时代码非常多,难免会造成命名相同,比如变量名相同,函数名相同等)。**所以我们要把他们封装在我们自己的命名空间。相当于告诉编译器这个变量名或者函数是来自哪一个地方,调用到正确的类型。
(3)如何使用命名空间
#include<iostream>
using namespace std;
int main()
{
cout << "Hello World" << endl;
return 0;
}
这里的用法是将std命名空间全部展开,可以使用命名空间里面的所有名称。
#include<iostream>
using std::cout;
using std::endl;
int main()
{
cout << "Hello World" << endl;
return 0;
}
这里using只是展开了std命名空间里的cout 和 endl。这种方式适合在大型项目里使用,避免命名空间的所有名称被暴露出来。
#include<iostream>
int main()
{
std::cout << "Hello World" << std::endl;
return 0;
}
要么直接在名称前加上命名空间和域操作符,直接使用。
这三段代码最后的结果都是一样的。只需要按程序需求来采用不同的方法来使用。