初遇C++之语法篇(一)

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

🍉博客主页:阿博历练记
📖文章专栏:c++
🚍代码仓库:阿博编程日记
🍡欢迎关注:欢迎友友们点赞收藏+关注哦🌹

初遇C++之语法篇(一),C++,c++,开发语言

🌺前言

友友们,在我们正式迈入c++大门之前,阿博先给友友们看下它的魅力所在:
1.c语言打印hello world
初遇C++之语法篇(一),C++,c++,开发语言
2.c++打印hello world
初遇C++之语法篇(一),C++,c++,开发语言
友友们看到这里我们已经对c++充满了期待🤩,在c++当中我们不仅可以用c++,也同样可以使用c语言,因为c++是兼容c语言的,好了下面来一起跟着阿博走进c++的世界吧🧙

🍰1.命名空间

💭友友们,为什么要存在命名空间呢,如果没有命名空间的话,有些情况下就会发生命名冲突
初遇C++之语法篇(一),C++,c++,开发语言
友友们这里我们包含了头文件stdlib.h,所以rand是一个库函数,而这里我们又把它定义为一个整形变量,所以就会导致出现重定义的问题 ,所以就会出现命名冲突导致我们无法再定义rand.由此,我们命名空间的故事就诞生了…

1.1命名空间的定义

📜定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。友友们注意{}最后没有分号.

1.2命名空间的使用

1.未展开命名空间

#include<iostream>
#include<stdlib.h>
namespace  ig
{
	int rand = 0;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};
}
int main()
{
	printf("%d\n", ig::rand);
	printf("%d\n", ig::Add(1, 2));
	struct ig::Node;
	return 0;
}

命名空间里面可以定义变量函数类型 ,命名空间我们可以把它理解为一个围墙,我们必须要有钥匙才有访问它的权限,::就是域作用限定符,相当于告诉编译器要在ig这个命名空间去访问rand如果不加,在默认情况下,我们是没有权限访问这个命名空间的,就会导致编译器找不到.这里友友们需要注意一下结构体,我们域作用限定符需要加在struct的后面.

2.展开命名空间

#include<iostream>
#include<stdlib.h>
namespace  ig
{
	int rand = 0;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};
}
using namespace ig;
int main()
{
	printf("%d\n", rand);
	printf("%d\n", Add(1, 2));
	struct ig::Node;
	return 0;
}

初遇C++之语法篇(一),C++,c++,开发语言

🔥🔥友友们这种情况就是我们解除了命名空间的权限,相当于把命名空间的围墙拆除了,但是就会导致rand定义不明确,库函数里面有rand,命名空间里面也有,就会导致编译器无法确定调用哪个rand,所以把命名空间全部展开其实是一种不安全的处理.

3.展开部分命名空间

#include<iostream>
#include<stdlib.h>
namespace  ig
{
	int rand = 0;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};
}
using  ig::Add;
int main()
{
	printf("%p\n", rand);
	printf("%d\n", Add(1, 2));
	struct ig::Node;
	return 0;
}

友友们这种情况就是我们只展开了命名空间中的Add函数,rand虽然在命名空间中,但是我们没有展开,没有访问它的权限,所以此时的rand就会从全局中搜索,此时它就是一个库函数.

4.命名空间嵌套命名空间

#include<iostream>
#include<stdlib.h>
namespace  ig
{
	int rand = 0;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};
	namespace  N
	{
		int rand = 10;
	}
}
using  ig::Add;
int main()
{
	printf("%p\n", rand);
	printf("%d\n", ig::N::rand);
	printf("%d\n", Add(1, 2));
	struct ig::Node;
	return 0;
}

所以当我们想访问N命名空间里面的rand,我们就可以再多嵌套一层即可.
初遇C++之语法篇(一),C++,c++,开发语言

5.同名命名空间可以合并
示例1

#include<iostream>
#include<stdlib.h>
namespace  ig
{
	int rand = 0;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};
	namespace  N
	{
		int rand = 10;
	}
}
namespace ig
{
	int ret = 5;
}
using  ig::Add;
int main()
{
	printf("%p\n", rand);
	printf("%d\n", ig::rand);
	printf("%d\n", ig::N::rand);
	printf("%d\n", Add(1, 2));
	printf("%d\n", ig::ret);
	struct ig::Node;
	return 0;
}

初遇C++之语法篇(一),C++,c++,开发语言
示例二
初遇C++之语法篇(一),C++,c++,开发语言
初遇C++之语法篇(一),C++,c++,开发语言

💐💐所以友友们我们可以得出结论:同名的命名空间是可以合并的,多个文件中的同名命名空间会被编译器合并,编译器不会报重定义的错误

💫2.重识hello world

所以友友们using namespace std;就是全部展开std这个命名空间,std就是c++标准库的命名空间所以我们才可以使用cout,endl.这里阿博给友友们介绍一个c++查阅资料的网站:https://legacy.cplusplus.com/reference/.
1.cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含iostream头文件中
2.<<是流插入运算符,>>是流提取运算符
3. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
4.使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型.

🍔3.缺省参数

3.1缺省参数概念

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

void Func(int a = 0)
{
	cout << a << endl;
}
int main()
{
	Func(2);
	Func();
	return 0;
}

初遇C++之语法篇(一),C++,c++,开发语言

3.2缺省参数分类

1.全缺省参数

void Func(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}
int main()
{
	Func();
	Func(1);
	Func(1, 2);
	Func(1, 2, 3);
	return 0;
}

初遇C++之语法篇(一),C++,c++,开发语言

🎯🎯友友们注意,当参数只有1个时,默认是传给第一个的,比如这里第一个参数是a,所以这个1就是传给a的,这种写法(,1,)以及(,,1)都是不允许的,这是语法规定,只能从左往右显示传参.

2.半缺省参数

void Func(int a, int b = 10, int c = 20)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}
int main()
{
	Func(1);
	Func(1, 2);
	Func(1, 2, 3);
	return 0;
}

初遇C++之语法篇(一),C++,c++,开发语言

友友们注意,对于半缺省参数必须从右往左依次给,不能间隔着给.

3.3缺省参数注意事项

1.缺省参数不能在函数声明和定义中同时出现,因为这里编译器害怕我们在声明中和定义中给的缺省值不一样,所以c++规定,在声明中给缺省值,定义不给
初遇C++之语法篇(一),C++,c++,开发语言
初遇C++之语法篇(一),C++,c++,开发语言
2. 缺省值必须是常量或者全局变量
文章来源地址https://www.toymoban.com/news/detail-628960.html

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

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

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

相关文章

  • “C++基础入门指南:了解语言特性和基本语法”

    C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式 等。熟悉C语言之后,对C++学习有一定的帮助 工作之后,看谁的技术牛不牛逼,不用看谁写出多牛逼的代码,就代码风格扫一眼,立刻就能看出来是正规军还是野生的程序员。代码的风

    2024年02月16日
    浏览(38)
  • c++:基于c语言基础上的语法不同(1)

    前言:此篇文章适合学完c语言基础概念的同学,是帮助c向c++语言的同学快速掌握基本语法。 按照c语言的语法也可以,头文件多包含#includestring 下面是通过数组名的方法打印字符串hello world。 1e2就是1x10的二次方 1e-2就是1x10的负二次方 float类型后面的数字要多写一个f,不然编

    2024年01月20日
    浏览(39)
  • 【鸿蒙开发】第七章 ArkTS语言UI范式-基础语法

    通过前面的章节,我们基本清楚鸿蒙应用开发用到的语言和项目基本结构,在【鸿蒙开发】第四章 Stage应用模型及项目结构也提到过ArkTS的UI范式的 基本语法 、 状态管理 、 渲染控制 等能力,简要介绍如下: 基本语法 : ArkTS 定义了 声明式UI描述 、 自定义组件 和 动态扩展

    2024年02月03日
    浏览(60)
  • HarmonyOS/OpenHarmony应用开发-ArkTS语言基本语法说明

    图1  示例效果图   本示例中,ArkTS的基本组成如下所示。 图2  ArkTS的基本组成     装饰器: 用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中@Entry、@Component和@State都是装饰器,@Component表示自定义组件,@Entry表示该自定义组件为入口组件,@State表示组

    2024年02月07日
    浏览(54)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 五)

    如果每个组件的样式都需要单独设置,在开发过程中会出现大量代码在进行重复样式设置,虽然可以复制粘贴,但为了代码简洁性和后续方便维护,我们推出了可以提炼公共样式进行复用的装饰器@Styles。 @Styles装饰器可以将多条样式设置提炼成一个方法,直接在组件声明的位

    2024年02月17日
    浏览(53)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 一)

    ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在 TypeScript (简称 TS )生态基础上做了进一步扩展,继承了 TS 的所有特性,是 TS 的超集。因此,在学习 ArkTS 语言之前,建议开发者具备 TS 语言开发能力。 当前, ArkTS 在 TS 的基础上主要扩展了如下能力: 基本语法:

    2024年02月16日
    浏览(66)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 四)

    当创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作。若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能。为解决此问题,ArkUI引入了@BuilderParam装饰器,@BuilderParam用来装饰指向@Builder方法的变量

    2024年02月17日
    浏览(52)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 二)

    在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成

    2024年02月04日
    浏览(53)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 三)

    在开始之前,先明确自定义组件和页面的关系: 自定义组件: @Component 装饰的 UI 单元,可以组合多个系统组件实现 UI 的复用。 页面:即应用的 UI 页面。可以由一个或者多个自定义组件组成, @Entry 装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有

    2024年02月16日
    浏览(59)
  • HarmonyOS(二)—— 初识ArkTS开发语言(下)之ArkTS声明式语法和组件化基础

    通过前面ArkTS开发语言(上)之TypeScript入门以及ArkTS开发语言(中)之ArkTS的由来和演进俩文我们知道了ArkTS的由来以及演进,知道了ArkTS具备了声明式语法和组件化特性,今天,搭建一个可刷新的排行榜页面。在排行榜页面中,使用循环渲染控制语法来实现列表数据渲染,使

    2024年02月04日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包