【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数

这篇具有很好参考价值的文章主要介绍了【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数,拿下C++,c++,c语言,开发语言

🚀前言

铁子们好啊!这是阿辉新开的专栏《拿下C++》的第一篇文章,本文主要带大家了解一下C++,带大家从C语言过渡到C++,所以大家首先要有C语言的基础,否则后面的内容你可能会异常懵逼。不会C语言的铁子,这里推荐各位先看阿辉的专栏《爱上C语言》(点击即可跳转,自荐一下嘛 😆)
不多bb好吧,让我们迈向C++的世界!!!


本篇文章仅为C++向C语言过渡的第一篇,后续会持续更新相关内容,阿辉不会去讲C++的发展史,阿辉旨在让铁子们快速入门C++,对于c++发展史感兴趣的铁子可以自行研究 😘


🚀C++有何过C之处?

首先,我们都知道C++这门编程语言是在C语言的基础上发展而来的,他名字也是由此而来,C++是完全兼容C语言的,怎么理解呢?C语言相当于是C++的真子集,C++包含了C语言的所有特性和语法规则,并且可以直接调用C语言的函数和库,也就是说C语言的代码在C++的环境下同样可以编译运行,用ven图表示如下
【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数,拿下C++,c++,c语言,开发语言
铁子们或许都听过C++是面向对象的语言,这个怎么理解呢?好的这个咱们先不理解 😅,因为我也不知道,my teacher告诉我学完C++你就懂了,好的铁子们咱们也学完C++在懂,提前懂了显得咱欺负人 😝

🚀C++中的关键字

C++中的69个关键字包含C语言中的32个关键字

关键字 关键字 关键字 关键字 关键字 关键字 关键字 关键字
asm else new this auto enum operator throw
bool explicit private true break export protected try
case extern public typedef catch false register typeid
char float reinterpret_cast typename class for return union
const friend short unsigned const_cast goto signed using
continue if sizeof virtual default inline static void
delete int static_cast volatile do long struct wchar_t
double mutable switch while dynamic_cast namespace template nullptr
typeid override alignas final char16_t

这些关键字不认识没关系,也不需要去背,用熟了自然就会了 😁

🚀命名空间

✈️为什么要引入命名空间?

C++引入了命名空间的概念,以便更好地组织和管理代码。为啥呢?

大型程序一般会使用多个独立开发的库,这些库又可能定义大量的全局变量的名字,如类、函数和模板等。当程序用到多个供应商提供的库时,不可避免地会发生某些名字相互冲突地情况。
这个时候我们将每一个库都装起来,用的时候再拿出来用,既能保证命名不会冲突,又能在需要时使用

命名空间分割了全局命名空间,其中每一个命名空间是一个作用域域是一种空间概念,常见的域有:局部域、全局域、类域、命名空间域,域会影响访问和生命周期

✈️命名空间的定义

首先,定义命名空间需要使用namespace这个关键字,然后在namepace后面跟上命名空间的名字一对花括号{},花括号里面放的是命名空间内的变量、函数、类等的定义和声明,命名空间也可以嵌套定义
切记命名空间花括号后无分号
下面我们来展示一个例子:

//下面这个tmh命名空间嵌套了一个命名空间tzh
namespace tmh//命名空间的名字
{
	//定义变量
	int a = 10;
	//定义函数
	int Add(int left, int right)
	{
		return left + right;
	}
	//定义类型
	struct Node
	{
		struct Node* next;
		int val;
	};
	//嵌套命名空间
	namespace tzh
	{
		int c;
		int d;
		int Sub(int left, int right)
		{
			return left - right;
		}
	}
}

注意

  • 命名空间的名字可以重复,这种重复并非两个不同的命名空间,而是在编译过程中将相同名字的命名空间合并,事实上还是一个命名空间

  • 命名空间不能在类和函数中定义

✈️如何使用命名空间中的内容呢?

这里我们引入一个操作符::作用域限定符,怎么使用呢?我们接着看

  • 命名空间的名字+::+命名空间内的变量、函数、类型等等
    例子:
int main()
{
    printf("%d\n", tmh::a);//上面的例子中的命名空间tmh
    return 0;    
}
  • 使用using将命名空间中某个成员(局部展开)
    例子:
using tmh::Node;//将定义的结构体Node展开在全局域中
int main()
{
   Node a;//用Node创建变量
    return 0;    
}
  • 使用using namespace 命名空间名称引入(全局展开)
    可以用using namespace tmh将命名空间展开(意味着在整个文件中都可以直接访问该命名空间中的函数、变量等),把命名空间中的成员提升到包含命名空间本身和using指示最近的作用域
    例子:
namespace tmh
{
	int a = 10;
	int b = 5;
	int c = 100;
}

int a = 30;

using namespace tmh;

int main()
{
	printf("%d\n", a);//这种写法是错误的,因为全局中定义了a,命名空间tmh中的a也展开在了全局域
	printf("%d\n", ::a);//正确:访问全局的a,::左边空白表示全局域
	printf("%d\n", tmh::a);//正确:访问tmh中的a
	printf("%d\n", b);//正确,去访问tmh中的b
	int c = 89;
	c++;//当前局部的c设置成90,局部变量优先,没有特别的指示优先使用局部域中的元素
	return 0;
}

🚀C++中的输入和输出

✈️C++标准库的命名空间

C++与C语言不同,在C++中标准库的定义和声明是分开的
std是C++标准库的命名空间,C++将标准库的定义实现都放到这个命名空间中
而将声明放在单独存放在各自的头文件中
std命名空间的使用惯例:

  • 在日常练习中,建议直接用using namespace std即可,这样很方便
  • 在项目开发中由于代码较多、规模大,就很容易出现冲突问题,所以建议指定命名空间去访问或者使用using把常用的名字引入

✈️输入输出头文件

C++中输入输出:

  • 使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间
  • 使用C++输入输出更方便,不需增加数据格式控制,比如:整形–%d,字符–%c
    ostream (输出流)类型全局对象,istream (输入流)类型全局对象 ,endl全局的换行符号
  • <<是流插入运算符,>>是流提取运算符
  • 使用C++的输入输出更加方便,不需要像printf和scanf输入输出那样,需要手动控制格式。C++的输入输出可以自动识别变量类型(本质上是运算符重载),但cout和cin的效率比较低

给铁子们直接上代码:

struct Person
{
	char name[10];
	int age;
};
int main()
{
	std::cout << "C++ ";
	std::cout << "C++ " << std::endl;
	//cout与cin对比C语言printf\scanf 来说可以自动识别类型(函数重载+运算符重载)
	int a = 10;
	int* p = &a;
	printf("%d,%p\n", a, p);
	std::cout << a << "," << p << std::endl;
	char str[100];
	std::cin >> str;  //cin不用&
	std::cout << str << std::endl;
	struct Person P = { "tmh", 20 };  //格式化输出printf比cout好
	printf("name:%s age:%d\n", P.name, P.age);
	std::cout << "name:" << P.name<<" age:"<< P.age << "\n";
}

输入:

tmhazjy

输出:

C++ C++
10,0xffff4860
10,0xffff4860
tmhazjy
name:tmh age:20
name:tmh age:20

🚀C++缺省参数

✈️缺省参数定义

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参(缺省就是默认,没给函数传参就用默认的)

void TestFunc(int a = 0)
{
	cout << a << endl;
}
int main()
{
	TestFunc(); // 没有传参时,使用参数的默认值
	TestFunc(10); // 传参时,使用指定的实参
}

✈️缺省参数的分类

  • 半缺省参数
void test1(int a, int b = 10, int c = 20)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}

半缺省参数必须从右往左依次给缺省值,即:第一个形参和第二个形参给了缺省值,而第三个形参没有给缺省值,这种情况是不被允许的。也不能隔着给,即:第三个形参和第一个形参给了缺省值,而第二个形参没有给缺省值,这种情况也是不被允许的

  • 全缺省参数
void test2(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}

顾名思义就是每一个参数都设置缺省值

✈️缺省参数只能出现在函数声明中

为了避免出现不一致的情况,要求缺省参数不能在函数声明和定义中同时出现,并且只能出现在函数的声明中
why?

因为在预处理阶段会把头文件展开,一般函数的声明就放在头文件中。如果只在函数的定义中给了缺省值,那头文件展开后,函数的声明语句中并没有缺省参数,此时如果在调用该函数的时候没有传参希望使用它的缺省值,那在程序编译的过程中就会出现问题,即:函数的声明没给出缺省值,意味着该函数需要参数


今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,您的支持就是阿辉前进的动力!
【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数,拿下C++,c++,c语言,开发语言文章来源地址https://www.toymoban.com/news/detail-774380.html

到了这里,关于【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【C++初阶】C++入门——C++介绍、命名空间、输入输出

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

    2024年02月11日
    浏览(43)
  • 【C++杂货铺】C++介绍、命名空间、输入输出

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

    2024年02月16日
    浏览(41)
  • 【C++起飞之路】初级——命名空间、输入输出流

    为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace) 当我们编写代码时,可能会产生一些命名冲突,为了解决这一冲突引出了命名空间的概念 命名冲突的产生主要包括两个方面原因: 1、与库函数名冲突 2、工程中的冲突(比如多人共同完成一个项目时,写了

    2024年02月03日
    浏览(46)
  • 【C++】:C++关键字,命名空间,输入&输出,缺省参数

    C++总计63个 ,C语言32个。 ps:下面我们只是看一下C++有多少,不对进行具体的讲解。在以后的学习中会会了解的更深。 在C语言的语法中,有时候会遇到这样的情况: 我们的本意是创建一个全局的 rand 变量,再进行输出。那为什么会报错呢? 原因:

    2024年04月27日
    浏览(48)
  • 【C++】关键字 & 命名空间 & 输入输出 & 缺省函数

    C++  总计 63 个, C语言 32 个 直接上图:  asm do if return try continue auto double inline short typedef for bool dynamic_cast int signed typeid public break else long sizeof typename throw case enum mutable static union wchar_t catch explicit namespace static_cast unsigned default char export new struct using friend class ext

    2024年02月08日
    浏览(48)
  • 【C++学习】C++入门 | C++该怎么学 | 命名空间 | 输入输出

    欢迎来到C++的世界,这是一门令人兴奋的语言。 好吧,每当我开始阅读C++的书籍的时候,开头的第一句话必定是这个, 也不知道其他语言的编程书籍是不是这样,那就让这句话也作为我C++分享之路上的第一句话吧。 目录 写在前面 1. C++怎么学? 1. C语言 2. Object-Oriented C++ 3.

    2024年02月10日
    浏览(43)
  • C++入门(1):命名空间,IO流 输入输出,缺省参数

    一、命名空间 1.1 命名空间的作用: ​ 避免标识符命名冲突 1.2 命名空间定义: :namespace PS: 命名空间可以嵌套. 在同一工程中,编译器会把 相同名称 的命名空间 合并 成到同一个命名空间中。 1.3 命名空间的使用 一个命名空间相当于定义了一个作用域,其中的所有内

    2024年02月07日
    浏览(45)
  • 【是C++,不是C艹】 第一个C++程序 | 命名空间 | 输入输出

    💞💞  欢迎来到 Claffic 的博客   💞💞   👉 专栏: 《是C++,不是C艹》👈 前言:   在认识了C++的来历之后,我们就要开始正式学习C++了,系好安全带,准备出发! 注: 你最好是学完了C语言,并学过一些初阶的数据结构。 从创建项目开始,添加项的时候终于 不用删pp 了

    2024年02月04日
    浏览(40)
  • 【C++的奇迹之旅(二)】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例

    C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式 等。熟悉C语言之后,对C++学习有一定的帮助,本章节主要目标: 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用 域方面、IO方面、函数方面、

    2024年04月09日
    浏览(88)
  • C++基础知识 (命名空间、输入输出、函数的缺省参数、函数重载)

    🌠 例1: #include iostream 标准输入输出 std 是 c++ 标准库的命名空间,将标准库的定义实现都放到这个命名空间中 using namespace std 展开 std 里的内容 cout   c 代表的是 console 控制台的意思, out 有输出的意思 流运算符 流插入 endl 等价于 \\\'n\\\' 在 c++ 中,变量、函数和类的名称存在于

    2024年02月15日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包