【C++初阶(一)】初识C++&命名空间

这篇具有很好参考价值的文章主要介绍了【C++初阶(一)】初识C++&命名空间。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

📙作者简介: 清水加冰,目前大二在读,正在学习C/C++、Python、操作系统、数据库等。

📘相关专栏:C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。

欢迎点赞 👍 收藏 ⭐留言 📝 如有错误还望各路大佬指正!

✨每一次努力都是一种收获,每一次坚持都是一种成长✨       

目录

 ​​​前言

1. 什么是C++

 2. C++的重要性

   2.1 使用广泛

  2.2 应用领域

 3. 命名空间

3.1  什么是命名空间

 3.2 命名空间的使用

 4.C++输入&输出

4.1 输出

4.2 输入

4.3 使用说明

总结


 

【C++初阶(一)】初识C++&命名空间,c++,visual studio

 

 ​​​前言

        今天正式开始C++的学习,C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C++学习有一定的帮助。


1. 什么是C++

         C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(面向对象)思想,支持面向对象的程序设计语言应运而生。

        C++是一种通用的、高级的编程语言,它是C语言的扩展和增强版本。C++在C语言的基础上引入了面向对象编程的概念,提供了更多的功能和特性,使得程序员能够更加方便地编写复杂的程序。

 2. C++的重要性

   2.1 使用广泛

 下图数据来自TIOBE编程语言社区2023年10月最新的排行榜,在30多年的发展中,C/C++几乎一
致稳居前5

 ​​​​​​​【C++初阶(一)】初识C++&命名空间,c++,visual studio

注意:排名不能说明哪个语言好,哪个不好,每门编程语言都有适应自己的应用场景。 

  2.2 应用领域

  1. 操作系统以及大型系统软件开发
  2. 服务器端开发
  3. 游戏开发
  4. 嵌入式和物联网领域
  5. 数字图像处理
  6. 人工智能
  7. 分布式应用

 作为一名老牌语言的常青树,C++一直霸占编程语言前5名,肯定有其存在的价值。

 3. 命名空间

        我们在日常应用中,一个较大项目一般都是分多文件进行管理,在引用其他文件时就可能会造成命名冲突的问题。例如:

【C++初阶(一)】初识C++&命名空间,c++,visual studio

         在stdlib.h中定义了rand函数,我们在包含stdlib.h文件后,再次新建一个命名为rand的变量,运行程序时,编译器分不清要使用的是哪个rand(变量名与库函数冲突),于是就产生了了命名冲突。C语言没办法解决类似这样的命名冲突问题,为了解决上述的问题,C++就提出了命名空间来解决

3.1  什么是命名空间

         命名空间(Namespace)是C++中用来避免命名冲突的一种机制。在C++中,我们可以将一些变量、函数、类等封装在一个命名空间中,从而避免与其他代码中的同名变量、函数、类等发生冲突。

比如: 

namespace Q 
{
	int rand = 0;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		int* data;
		int size;
	};
}

 注意:命名空间可以嵌套

这些声明的作用域仅限于该命名空间中。在其他代码中,如果想要使用该命名空间中的变量、函数、类等,需要在前面加上命名空间的名称(默认情况下,程序不会在命名空间里去找)。

 3.2 命名空间的使用

  • 使用域作用限定符
int main()
{
	printf("%d\n", Q::rand);//命名空间名::限定变量
    
	struct Q::Node node;//注意当指定元素时不能指定在struct前边,要在结构体名Node前

    //注意不是struct在空间里边,而是Node在空间里

	Q::Node node1;//或者使用重命名这样写
	return 0;
}
  • 嵌套使用

在一个命名空间里边如果定义两个同名的变量怎么解决?

也很简单,我们可以在嵌套一个。比如: 

namespace Q
{
	namespace Q1
	{
		int rand = 666;
	}

	int rand = 0;
	
}
int main()
{
	printf("%d\n", Q::rand);
	printf("%d\n", Q::Q1::rand);
	return 0;
}
  •  声明和定义分离

在写代码时我们也会经常遇到这种情况

如果声明和变量分离,要把哪个写在命名空间里边?答案是两个都写。

比如:

//fun.h

#pragma once
#include<stdio.h>
namespace Q
{
	typedef struct Stack
	{
		int* data;
		int size;
		int capacity;
	}ST;

	void InitStack(ST* ps);
	void pushStack(ST* ps, int a);

}

//fun.c

#include"Func.h"
namespace Q
{
	void InitStack(ST* ps)
	{
		ps->data = NULL;
		ps->size = 0;
		ps->capacity = 0;
	}
	void pushStack(ST* ps, int a)
	{
		//…
	}
}


 它们的命名空间可以同名,在代码编译时编译器会将多个同名的命名空间合并成一个

  •  展开命名空间

 有了这个命名空间可以解决命名冲突的问题,但在大量调用命名空间里的内容时就有点麻烦了,比如:

int main()
{
	Q::ST s;
	int a = 0;
	Q::InitStack(&s);
	Q::pushStack(&s, 1);
	Q::pushStack(&s, 2);
	Q::pushStack(&s, 3);
	Q::pushStack(&s, 4);
	Q::pushStack(&s, 5);
}

 每次都要加限定符,为了解决这个问题,这时我们可以默认使用这个命名空间(展开命名空间),我们可以加上这行代码:

using namespace Q;

 这也是我们在写C++第一个程序:Hello,world!;时为什么要有using namespace std;的原因,std就是C++的官方库定义的命名空间,展开之后就可以随意使用C++库里的函数。

注意:展开命名空间虽然方便,但也不是在任何情况下都可以展开的,在一些大型项目中不要展开std,容易冲突。我们日常写代码练习时,为了方便,可以展开。

  •  展开命名空间里的元素

 我们在使用时为了防止展开命名空间引起冲突,又不想一种限定使用怎么办?

这时我们就可以选择展开命名空间里的个别元素,比如:

using std cout;
using std endl;
int main()
{
	cout << "hello,world!";
    //加入换行
    cout << "hello,world!"<< '\n';//或者cout << "hello,world!"<< endl;

}

 4.C++输入&输出

         接下来我们来了解一下C++里的输入和输出。

4.1 输出

【C++初阶(一)】初识C++&命名空间,c++,visual studio

 这是C++入门写的第一个程序,但cout出现了报错,报错显示未声明cout。这是因为我们没有展开std,C++所有库函数都封在std这个库里边,没有展开std库默认就不会从std库里寻找。

int main()
{
	std::cout << "hello,world!";
    //加入换行
    std::cout << "hello,world!"<< '\n';//或者std::cout << "hello,world!"<< std::endl;

}

 我们在学习C语言时,输出数据还需要根据数据类型判断使用%d、%lf、%c等,但是C++cout不需要,cout会自动识别数据类型并输出

 我们这样限定一下就可以了。

4.2 输入

 C++的输入使用的是 “cin” ,cin和cout一样也是可以自动识别数据类型;使用如下:

int main()
{
	int a;
	char c;

	std::cin >> a >> c;
	cout << a << endl << c;
}

4.3 使用说明

  1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<iostream >头文件中。
  3. <<是流插入运算符,>>是流提取运算符。
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式,C++的输入输出可以自动识别变量类型。

 注意:

        早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;        

        旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用<iostream>+std的方式。


总结

         C++兼容C,但C++入门基础使用不像C那样简单,其中也存在许多细节上的问题,好了,以上便是本期的全部内容,希望本篇文章可以帮到你。最后,感谢阅读!文章来源地址https://www.toymoban.com/news/detail-714047.html

到了这里,关于【C++初阶(一)】初识C++&命名空间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++那些事儿】初识C++ 命名空间,C++中的输入输出以及缺省函数

    君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,数据结构和算法初阶更新完毕,我们继续来扩充我们的知识面,今天我们从认识C++开始来带大家学习C++,我之前看过一套书叫做《明朝那些事儿》,把本来枯燥的历史讲的生动

    2024年02月08日
    浏览(54)
  • 【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入&输出、缺省参数、函数重载

    目录 1. C++ 2. 命名空间 2.1 命名空间的定义 2.2 命名空间的使用 3. C++输入输出 4. 缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 5. 函数重载 5.1 函数重载概念 5.2 C++支持函数重载的原理——名字修饰(name Mingling) 5.3 extern \\\"C\\\" ❀❀❀ 没有坚持的努力,本质上并没有多

    2024年02月15日
    浏览(55)
  • 【C++初阶】关键字&命名空间&缺省函数&函数重载入门必看!!!超详解!!!

     ========================================================================= 主页点击直达: 个人主页 我的小仓库:代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 计算机

    2024年02月07日
    浏览(45)
  • 【C++初阶】一、入门知识讲解(C++关键字、命名空间、C++输入&输出、缺省参数、函数重载)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】十一、归并排序(比较排序)的讲解和实现 (递归版本 + 非递归版本 -- C语言实

    2024年02月05日
    浏览(49)
  • 【C++深入浅出】初识C++上篇(关键字,命名空间,输入输出,缺省参数,函数重载)

         目录 一. 前言 二. 什么是C++ 三. C++初探 四. 命名空间 4.1 为什么要引入命名空间 4.2 命名空间的定义 4.3 命名空间使用 五. C++的输入输出 六. 缺省参数 6.1 缺省参数的概念 6.2 缺省参数的分类 七. 函数重载  7.1 函数重载的概念 7.2 函数重载的条件 7.3 C++支持函数重载

    2024年02月13日
    浏览(145)
  • 刘铁猛C#语言入门详解课程听课笔记--初识类与命名空间

    类:构成程序的主体;C语言是一门面向过程的程序设计语言,所以其用函数来组织程序;C#语言是一门完全面向对象的程序设计语言,其用类来组织程序,类是构成程序的主体,任何一个方法和变量都必须隶属于某一个具体的类;而C++也是一门面向对象的程序设计语言,但是

    2024年02月13日
    浏览(35)
  • 微软 Visual Studio 迎来 AI 建议命名功能

    目录 1微软 Visual Studio 迎来 AI 建议命名功能 2专访核桃编程CEO曾鹏轩:实操是掌握编程技能的唯一办法 IT之家 12 月 19 日消息,使用付费 GitHub Copilot Chat 扩展的 Visual Studio Preview 用户,现在可以使用 AI 来建议变量、方法和类的名称。 微软表示,该扩展不仅仅是建议一个名称,

    2024年02月03日
    浏览(32)
  • 【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

    命名空间 namespace 又称为 名字空间 , 名称空间 , 名域 , 作用域 , 是 C++ 语言 对 C 语言 的扩展 之一 ; C++ 中的 命名空间 namespace 指的是 标识符 的 可见范围 , C++ 标准库中的 所有 标识符 , 都定义在 std 命名空间中 ; 命名空间 英文名称是 \\\" namespace \\\" , name 是 名字 , 名称 的意思 ,

    2024年02月12日
    浏览(41)
  • VSIX:C#项目 重命名所有标识符(Visual Studio扩展开发)

            出于某种目的(合法的,真的合法的,合同上明确指出可以这样做),我准备了一个重命名所有标识符的VS扩展,用来把一个C#库改头换面,在简单的测试项目上工作很满意,所有标识符都被准确替换。我还尝试用在C++项目上,问题就比较多了,因为VS并不能准确识别

    2024年02月05日
    浏览(53)
  • 【C++初阶】内存管理 && 初识模板

    C/C++的内存分布主要分为 栈区、堆区、数据段和代码段,还有内存映射段。 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包