【是C++,不是C艹】 第一个C++程序 | 命名空间 | 输入输出

简介: 第一个C++程序 | 命名空间 | 输入输出

前言:

在认识了C++的来历之后,我们就要开始正式学习C++了,系好安全带,准备出发!

注:

你最好是学完了C语言,并学过一些初阶的数据结构。



Part1:给C++打个招呼


1.Hello,cpp!


从创建项目开始,添加项的时候终于不用删pp了😝

bac8084657bb058a47c93e163ca50633_e3d60be4c2af43d8aeae809d02cf7870.png我上来就是!!!一个左正蹬...,额不,一个C++程序:


#include<iostream>
using namespace std;
int main()
{
  cout << "Hello,cpp!" << endl;
  return 0;
}


唱跳rap篮球 + F5:

2afeab83c3b8d3168362f930cae45a90_82ffe4f77c0548839176406d39d1d54d.png

你乍一看这代码,好像熟悉又陌生... ...

说熟悉吧,int main()  return 0; 是明白的,跟C语言的一模一样;

说陌生,<iostream>是啥?using... ? 还有 cout , endl,不认识。

开始怀念C语言了:

#include<stdio.h>
int main()
{
  printf("Hello,cpp!\n");
  return 0;
}


输出相同: 

687125ac29b9d5e558643edaf5e4d8ba_5a0103c2ef50409dbdd4f08d3d9e853d.png

既然结果相同,那两种写法每个语句之间是不是有一些微妙的关系?

欸,继续向下看,你会找到答案。


2.关键字


C++总计63个关键字,C语言32个关键字

下面是C++关键字的汇总表,你大体见见模样即可:

6f3134092e0aba1a52be3673295704ad_088e72547b814a40b14e690897bf2b82.png

C++的关键字的丰富感有没有?


Part2:命名空间(namespace)


1.为何而来?


不知道大家在C语言中有没有这样的经历:

不小心把自己的变量名设置成C语言的关键字/函数名了,导致命名冲突;

上一个例子恶心你👻:

#include <stdio.h>
#include <stdlib.h>
int rand = 114514;
int main()
{
  printf("%d\n", rand); // stdlib.h 里的 rand 还是 全局中定义的 rand ?
  return 0;
}

报错:

7aeefe1b71eb8929e78fdb5ce1cdfd68_b6a1a4b2dc6b4dbe91ec93a3e7b7ccaf.png

命名空间基本上就是为了解决这个问题的:

使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染。


知道 namespace 对C语言的改善作用了吧。


2.命名空间的定义


一图就懂:

39272042e3f750c2404cd1db8c75ef98_33c9ee69469b493288d0b6f4ddc949e0.png

那命名空间的成员可以是什么?

可以定义变量/函数/类型

如:

namespace Claffic
{
  // 定义变量
  int x = 10;
  // 定义函数
  int Add(int left, int right)
  {
    return left + right;
  }
  // 定义结构体类型
  struct Node
  {
    int val;
    struct Node* next;
  };
}

你以为到这就结束了?

不,命名空间还可以嵌套

// 命名空间可以嵌套
// Test.cpp
namespace N1
{
  int a;
  int b;
  int Add(int x, int y)
  {
    return x + y;
  }
  namespace N2 // 被N1嵌套在内
  {
    int c;
    int d;
    int Sub(int x, int y)
    {
      return x - y;
    }
  }
}

而且而且,

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中

// Test.h
namespace N1
{
  int Mul(int x, int y)
  {
    return x * y;
  }
}

ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个 


3.命名空间的使用


这里定义一个命名空间:

namespace Claffic
{
  int a = 0;
  int b = 1;
  int Add(int x, int y)
  {
    return x + y;
  }
  struct Node
  {
    int val;
    struct Node* next;
  };
}

如果我们想全局变量那样直接使用,会出现错误:

b79fb7799e91b0a1fcc4991404ab1a74_803895e353f94197be689f524069d41e.png

打开方式不对... ...

命名空间的使用呢,有三种方式:


加命名空间名称及作用域限定符


命名空间名称 :: 要使用成员


int main()
{
  printf("%d\n", Claffic::a);
  return 0;
}

使用using将命名空间中某个成员引入


using 命名空间名称 :: 要使用成员
using Claffic::a;
int main()
{
  printf("%d\n", a);
  return 0;
}

• 使用using namespace 命名空间名称引入


using namespace 命名空间名称


using namespace Claffic;
int main()
{
  printf("%d\n", a);
  printf("%d\n", b);
  Add(2, 3);
  return 0;
}

这种用法可以使用命名空间中的所有成员;

看到这里,是不是觉得似曾相识?

在跟C++打招呼的时候,开头就用了这种命名空间使用,std 就是标准库中的一个命名空间,

包含了相应的头文件并且引用了它,就可以使用其中的 cout endl

不卖关子了,直接告诉你吧,endl 就相当于 \n ,换行符;

至于 cout 嘛,嘿嘿,下面讲的就是它:


Part3:C++输入和输出


1.标准输入输出


cout         // 标准输出
cin          // 标准输入

使用上述两个东东时,必须包含 <iostream> 头文件以及按命名空间使用方法使用std;

endl是特殊的C++符号,表示换行输出,他们都包含在包含 <iostream> 头文件中。

有了这些还不够,还有两个像大于/小于号的东西:

<< 是流插入运算符,>> 是流提取运算符:

int a = 0;
cin >> a;
cout << "abcdef" << a << endl;

二者是这样配合使用的。

与C语言相比,是不是输入输出更加方便了?

因为它不需要像printf/scanf输入输出时那样,需要手动控制格式;

C++的输入输出可以自动识别变量类型。


2.std 命名空间的使用惯例


stdC++标准库的命名空间,如何展开std使用更合理呢?

using namespace std 就是一种使用方式,

这种使用方式就很方便,适合日常的练习。

但是在项目开发中,代码多,规模大,就容易出现命名冲突的问题,

所以在这种情况下,建议指定使用的命名空间

using std::cin;
using std::cout;


Part4:溯源


“溯源”大题小用🤣🤣🤣

其实就是再看篇头那段代码:

#include<iostream>
using namespace std;
int main()
{
  cout << "Hello,cpp!" << endl;
  return 0;
}

到这里,我相信你已经能够解读这一段代码了:

#include<iostream>     // 引用头文件
using namespace std;   // 展开std命名空间
// 二者配合使用,可用cout,endl关键字
cout << "Hello,cpp!";
// 标准输出,配合 << (流提取运算符)使用
endl 相当于C语言中的 '\n' 换行符

总结:

这期博客,以 Hello cpp 起,Hello cpp 收,带大家写下了第一个C++程序,并向大家解释了命名空间和输入输出等重要知识内容,你学的怎么样呢?

目录
相关文章
|
3月前
|
C++
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
47 0
|
1月前
|
存储 程序员 编译器
简述 C、C++程序编译的内存分配情况
在C和C++程序编译过程中,内存被划分为几个区域进行分配:代码区存储常量和执行指令;全局/静态变量区存放全局变量及静态变量;栈区管理函数参数、局部变量等;堆区则用于动态分配内存,由程序员控制释放,共同支撑着程序运行时的数据存储与处理需求。
106 21
|
1月前
|
安全 程序员 编译器
【C++】如何巧妙运用C++命名空间:初学者必备指南
【C++】如何巧妙运用C++命名空间:初学者必备指南
|
2月前
|
C++
【C++基础】程序流程结构详解
这篇文章详细介绍了C++中程序流程的三种基本结构:顺序结构、选择结构和循环结构,包括if语句、三目运算符、switch语句、while循环、do…while循环、for循环以及跳转语句break、continue和goto的使用和示例。
46 2
|
3月前
|
程序员 C++ 开发者
C++命名空间揭秘:一招解决全局冲突,让你的代码模块化战斗值飙升!
【8月更文挑战第22天】在C++中,命名空间是解决命名冲突的关键机制,它帮助开发者组织代码并提升可维护性。本文通过一个图形库开发案例,展示了如何利用命名空间避免圆形和矩形类间的命名冲突。通过定义和实现这些类,并在主函数中使用命名空间创建对象及调用方法,我们不仅解决了冲突问题,还提高了代码的模块化程度和组织结构。这为实际项目开发提供了宝贵的参考经验。
63 2
|
2月前
|
程序员 C++ 容器
C++编程基础:命名空间、输入输出与默认参数
命名空间、输入输出和函数默认参数是C++编程中的基础概念。合理地使用这些特性能够使代码更加清晰、模块化和易于管理。理解并掌握这些基础知识,对于每一个C++程序员来说都是非常重要的。通过上述介绍和示例,希望能够帮助你更好地理解和运用这些C++的基础特性。
41 0
|
3月前
|
编译器 C语言 C++
C++入门 | 命名空间、输入输出、缺省参数
C++入门 | 命名空间、输入输出、缺省参数
46 4
|
2月前
|
C语言 C++
C++(六)Namespace 命名空间
命名空间(Namespace)是为了解决大型项目中命名冲突而引入的机制。在多库集成时,不同类库可能包含同名函数或变量,导致冲突。C++通过语法形式定义了全局无名命名空间,并允许对全局函数和变量进行作用域划分。命名空间支持嵌套与合并,便于协同开发。其使用需谨慎处理同名冲突。
|
3月前
|
PHP C++ Python
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
64 0
|
3月前
|
C++
c++学习笔记03 程序流程结构
C++学习笔记,主要介绍了程序流程结构,包括顺序结构、选择结构和循环结构。选择结构中详细解释了if语句、三目运算符和switch语句的用法和注意事项。循环结构部分则涵盖了while循环、do-while循环和for循环的语法和使用技巧。此外,还介绍了跳转语句,包括break、continue和goto语句的用途和用法。
35 0