本节我们来学习C++的第一个程序。
俗话说:“万事开头难”,“好的开始便是成功的一半”。
话又说回来,人类最开始的学习行为:便是模仿——C++兼容C语言,相信类比学习在这儿会有举足轻重的作用。
你还记得C语言的helloword怎么样书写的吗?
#include <stdio.h>//为了使用printf函数,我们包含一个头文件
int main()//main函数乃程序入口
{
printf("hello world\n");//printf是一个输出函数,将括号里的内容,默认输出到控制台上
return 0;//代码走到这一行:意味着前面的代码都顺利进行,也意味着程序返回0结束
}
我们再来看c++的helloword:
#include <iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
运行截图:
路是一步步走出来的,学习也是一步步来的;
#include <iostream>
iostream:
全写:input output stream ; 意为:输入 输出流。是标准的输入、输出流库,定义了标准输入、输出对象。
从C++角度出发:这里包含一个iostream类,是为了使用它的对象cout,cin;
从C角度看:这句#include <iostream>与#include <stdio.h>。都是为了后面代码调用相应的对象或函数。
所谓:有需求,就有供应。C++程序要对象,库就提供类;C里需要输出函数,库就提供函数声明(定义);
按我的理解:这里就凸显C++和C的不同,C++可以面向对象编程,而C还是围绕着各种函数实现各种功能。
using namespace std;
这一句就陌生了,三个词儿,俩关键字,一个缩写;
namespace:
namespace,意为:命名空间,c++的关键字(关键字,就是提示:取变量名,函数名时不能与之撞名)。
它的存在,即是为了避免命名冲突。此处关于namespace的知识:C++:namespace-CSDN博客相信你看完之后,对于namespace有了更多的收获。
我们在这里就直击要害,这句代码翻译成大白话即“使用命名空间std”。
何故?这是因为:
C++标准库:
如果没有修炼遗忘大法的同学,便知道我们刚刚还说了一个库——输入输出流库
C++标准库是一个庞大而全面的库,它包含了众多用于各种编程任务的类和函数。这些库旨在提高C++程序的开发效率和可重用性。C++标准库被组织成多个部分,包括但不限于算法、容器、迭代器、字符串处理、I/O(输入/输出)流、时间处理、本地化支持等。
C++标准库与输入输出流库的关系:
iostream
(输入输出流)库是C++标准库中的一个重要组成部分,它专门用于处理输入和输出操作。iostream
库提供了一系列用于输入输出的类和对象,其中最重要的是cin
(用于从标准输入读取数据)、cout
(用于向标准输出写入数据)和cerr
(用于向标准错误输出写入数据)。这些对象分别对应于C++程序中的输入流、输出流和错误输出流。
简而言之,iostream
库是C++标准库的一个子集,专门用于处理输入和输出任务。
那在此处:
第一个,逗号前面相信你能够理解(cout/cin/endl -> 输入输出流库 -> C++库),C++库外边用一个名叫std的命名空间进行隔离。需要使用特殊的三个方法来使用std命名空间中的类和函数——这里使用的,便是直接展开命名空间:using namespace 命名空间名。
总结:
为了使用后面的cout/cin/endl,我们在第一句话包含了iostream头文件,来使用iostream中的类和函数。但是发现iostream外层有个壁垒叫std,与当前域形成了隔阂,不可直接使用。故为了大量使用cout/cin且为了方便。我们直接展开std——using namespace std,这样就可以省略 std::cout 、std :: cin 、std :: endl前的endl。
namespace展开后就不存在,空间中的类和函数与当前空间融合,此时若发生命名冲突,就很麻烦了。故在⼀般⽇常练习中我们可以using namespace std,实际项⽬开发中不建议using namespace std。
如果直击要害还不能彻底理解,那我们还是追根溯源,打破砂锅问到底C++初阶_1:namespace-CSDN博客
#include <iostream>
using namespace std;
int main()
{
return 0;
}
程序的入口——main函数
无论是在C/C++还是Java中,main
函数/方法都是程序执行的起点。它负责初始化程序所需的环境,并调用其他函数/方法以执行程序的其余部分。在C/C++中,main
函数返回一个整数,用于表示程序的退出状态;而在Java中,main
方法没有返回值(即返回类型为void
),但通常通过打印到控制台或其他输出流来与用户交互。
public class HelloWorld {
public static void main(String[] args) {
// 程序代码
}
}
这里的C++同样使用main函数,靠最后返回0这个整数,表示程序顺利退出,默认使用0。而在程序中途返回,一般被视为异常。
输出hello wolrd
cout << "hello world" << endl;
std::cout 是 ostream 类的对象,它主要⾯向窄字符的标准输出流。
std::endl 是⼀个函数,流插⼊输出时,相当于插⼊⼀个换⾏字符刷新缓冲区。(当下可不管endl本质为何是个函数,可默认与“\n”,'\n'无异)。
C++的输入输出与C相比
//C++的输入与输出
#include <iostream>
using namespace std;
int main()
{
int a = 0;
double b = 2.22222222;
char c = 'c';
cout << a << " " << b << " " << c << endl;//可以自动识别类型,输出
//但是这样不能格式化,double型精确度在5位
return 0;
}
运行截图:
你会发现,a b c 三种类型变量都按照其类型输出(只是double默认最大输出5位),说明它输出时具有自动识别类型的功能。
我们再来看C代码:
#include <iostream>
using namespace std;
int main()
{
//使用scanf和printf格式化输出
scanf("%d %lf",&a,&b);//0 2.222222222
printf("%d %.2lf\n", a, b);
return 0;
}
结果:
可以看到,C不能自动识别变量类型,但可以格式化;C++可以自动识别,不能格式化。如果需要格式化,C++另有函数可以实现。不过,本着大道至简的原则,需要格式化咱就用C,不需要格式化就用C++,简单省心。
关于提高性能:
#include <iostream>
using namespace std;
int main()
{
//在io需求比较高的地方,如部分大量输入的竞赛题中,加上以下3行代码
// 可以提高C++IO效率
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
return 0;
}
本节的HELLO WORLD程序就结束了,C++之路漫漫,学海亦无涯。
参考代码如下:
#include <iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}