第一个c++程序
一、cout :
cout是一个输出流对象,它是“console out”(控制台输出)的缩写,是属于basic_ostream类的对象。ostream类在iostream头文件中定义。 (输出ostream类 输入istream类)
二、操作符号<<
c语言中<<是左位移操作符,为什么在c++中表现为“流”,这里涉及到c++的一个特点:支持重载
三、using namespace std; //命名空间std:
std就是c++标准库中所使用的所有标识符都是在同一个特殊的命名空间(std)中来定义的 。如果没有这条命令可以使用std::cout来调用输出流对象。
当我们将using namespace std;注释掉时会发现出现以下错误;
/home/cmf/CLionProjects/untitled1/main.cpp:10:5: error: ‘cout’ was not declared in this scope
cout << "结果是:" << addArray(data, size) << endl;
/home/cmf/CLionProjects/untitled1/main.cpp:10:55: error: ‘endl’ was not declared in this scope
cout << "结果是:" << addArray(data, size) << endl;
//因为endl和cout都属于标准库里,像cout属于iostream头文件中的
C++中命名空间的作用类似于操作系统中的目录和文件的关系,由于文件很多,不便管理,而且容易重名,于是设立若干子目录,把文件放到不同的子目录中,不同子目录中的文件可以同名,而调用文件时应指出文件路径。
命名空间的作用是建立一些相互分隔的作用域,把一些全局实体分隔开来,以免产生名字冲突。 可以根据需要设置多个命名空间,每个命名空间名代表一个不同的命名空间域,不同的命名空间不能同名。这样可以把不同的库中的实体放到不同的命名空间中,或者说,用不同的命名空间把不同的实体隐蔽起来。过去我们用的全局变量可以理解为全局命名空间,独立于所有有名的命名空间之外,它是不需要用namespace声明的,实际上是由系统隐式声明的,存在于每个程序中。
对一个整型数组求和,要求:定义一个存储着n个元素的数组,要求用c语言完成这个任务
//c++
#include <iostream>
//<iostream.h>是为了c92标准中为了兼容,现在c99标准不需要这样,下文备注有详解
using namespace std; //名字空间
int addArray(int *array, int n);
int main()
{
int data[] = { 0,1,2,3,4,5,6,7,8,9 };
int size = sizeof(data)/sizeof(data[0]);
cout << "结果是:" << addArray(data, size) << endl;//endl表示结束
// = std::cout << "结果是:" << addArray(data, size) << std::endl;
return 0;
}
int addArray(int* array, int n)
{
int sum = 0;
int i;
for (i = 0; i < n; i++)
{
sum += *array++ ;
}
return sum;
}
结果:
/home/cmf/CLionProjects/untitled1/cmake-build-debug/untitled1
结果是:45
Process finished with exit code 0
备注:
-
#include和#include<iostream.h>的区别
区别在于:
如果用了isotream则一定要引入命名空间,即 using namespace std
如果用了iostream.h,则不能引入命名空间,否则会引起编译错误,提示找不到命名空间.
从功能性的角度来讲,iostream包含了一系列模板化的I/O类,相反地 iostream.h只仅仅是支持字符流。
另外,输入输出流的C++标准规范接口在一些微妙的细节上都已改进,因此,iostream和iostream.h在接口和执行上都是不同的。
最后,iostream的各组成都是以STL的形式声明的,然而iostream.h的各组成都是声明成全局型的。
严格来说,不带h的用法是纯C++的标准用法,主要是配合STL库使用的。如果你的程序要使用C库,那么就要带.h。因此第一种和第二种写法,最大的区别在于你使用C模式还是纯C++模式。还有比如string.h是旧的C头文件,对应的是基于char*的字符串处理函数;string是包装了std的C++头文件,对应的是新的strng类;cstring是对应旧的C头文件的std版本。2.c++标准库
参考文章:#include和#include<iostream.h>的区别
参考文章C++标准库的学习笔记