c++过渡知识1

在这里插入图片描述
嗨喽大家好呀,今天给大家带来的是c++必备的过渡知识,希望对大家认识c++有一定的帮助,下面我们来领略命名空间和缺省参数的魅力!

一.c++的过度知识

关于c++的一些关键字

c中的命名冲突

c++的命名空间域介绍

展开命名空间域

展开命名空间域和展开头文件的区别

static关键字

头文件的两种声明

流插入和流提取

二.缺省参数和半缺省参数

今天让我们来学习关于c++我们需要掌握的过度知识,相信经过阅读本篇博客,你一定清晰感觉到c到c++的过度还是比较大的

1. 关于c++的一些关键字

首先我们来介绍一下c++中的关键字,总共有63个关键字
在这里插入图片描述

相对于c来说,c++的关键字明显多了不少,今天我们将学习其中的几个关键字,后续我们将会陆续给出,大家不用死记硬背,多用自然就熟悉了

2.c中的命名冲突

#include<stdio.h>
#include<stdlib.h>

int rand = 0;


int main()
{
	return 0;
}

在这里插入图片描述

大家可以思考一下为什么会报错?相信聪明的同学一眼就可以看出这里发生冲突的原因是因为在C语言中,函数名本质上也是全局的标识符。当你定义int rand = 0;时,你正在尝试在当前作用域(可能是全局作用域,也可能是某个函数或代码块内部)创建一个名为rand的整型变量。如果这是在全局作用域中,那么rand就成为了一个全局变量。
所以我们的c++之父本贾尼博士就在c的基础上增加了命名空间域的这一概念来避免我们自己定义的变量与库函数冲突,下面让我们来走进命名空间域

3.c++的命名空间域介绍

c++用来创建命名空间的关键字是namespace,我们可以在自己命名的空间里随意创建变量,结构以及函数,下面一段代码我来给大家演示一下

namespace ZJ
{
	int rand = 0;

	struct student
	{
		int age;
		char name;
	};

	int add(int x, int y)
	{
		return x + y;
	}
}

那么此时就会有小伙伴问了,我们怎么来用这些变量,结构和函数呢?这些是属于局部变量还是全局变量呀?哈哈,慢慢听我来给你讲

划重点咯,下面我给大家介绍一下编辑器的默认查找规则,便于我们理解后续的操作
我们在c语言便了解过局部变量优先原则,在编辑器查找完局部变量才会去查找全局变量,而在c++中这些顺序也不变,默认状态下也不会去查找我们命名空间里的变量。

在这里插入图片描述

::叫做域作用限定符,当左边没有东西时,默认访问全局的变量,而当我们在左边加上我们命名空间域的名字时,就会访问域里的变量,类似:
在这里插入图片描述

需要注意的是结构体变量的引用我们要注意格式

int main()
{
	**struct ZJ::student Class;**
	printf("%d\n", ZJ::a);
	return 0;
}

4.展开命名空间域

接下来我们将要介绍的是将命名空间域展开,有些小伙伴说我们上面的方法用的挺舒服的呀,干嘛要学展开命名空间域呢?
但是在实际情况中,我们需要多次运用一个域中的同一个函数或者结构,如果一直像上面那种方法。难免会让人觉得麻烦

在这里插入图片描述

using namespace ZJ;

只要有了这么一句代码,命名空间作用域下的内容我们就都能直接运用
此时编辑器的查找顺序就变成了局部变量后是全局变量和命名空间域中的变量,注意:全局变量和命名空间中的变量会一起搜索,属于同一优先级
此外:
命名空间可以包含全局变量(即,定义在命名空间中的变量,在命名空间范围内是全局的)。
这些全局变量对于命名空间外部的代码来说,不是直接可见的,除非通过using声明或者完全限定的名字(如namespace_name::variable_name)来访问。
在C++的命名空间中定义的变量不是“局部变量”,因为它们的生命周期不是限制在某个函数或块执行期间。它们更像是被封装在命名空间范围内的全局变量。

当我们在进行项目时文件可能会上百个,我们就需要每几个人一个小组用一个命名空间域的名字,因为多个文件可定义同名的命名空间,这些空间会自动进行合并。

5.展开命名空间域和展开头文件的区别

展开头文件(#include)

1.目的:头文件展开是预处理器的工作,它的目的是将头文件的内容插入到源文件中#include指令所在的位置。这样做通常是为了提供函数声明、类型定义、宏定义等,以便编译器能够正确地编译源文件。
2.时间:这个过程发生在编译的预处理阶段,是实际编译之前的一个步骤。
3.内容:头文件通常包含函数原型、全局变量声明、类型定义(如结构体、联合体、枚举等)、宏定义以及内联函数等。
4.示例:在C或C++中,#include <stdio.h>或#include "myheader.h"会告诉预处理器将指定的头文件内容插入到该位置。
5.作用域:头文件展开后,其中声明的标识符(如函数、全局变量等)的作用域取决于它们在头文件中的声明方式。如果是全局声明,则它们的作用域是全局的;如果是静态声明,则它们的作用域仅限于包含该头文件的源文件。

展开命名空间域(C++中的namespace)

1.目的:命名空间域的展开是编译器的工作,它的目的是确定命名空间内标识符的可见性和作用域。命名空间是C++中的一个特性,用于封装代码并防止命名冲突。
2.时间:这个过程发生在编译阶段,是预处理之后的步骤。

内容:命名空间可以包含类、函数、变量、类型别名、模板以及其他命名空间等。

3.示例:在C++中,namespace MyNamespace { /* … */ }会定义一个命名空间,其中的内容在命名空间外部是不可见的,除非通过using声明或完全限定的名字来访问。
4.作用域:命名空间提供了一种控制标识符作用域的方式。命名空间内的标识符在命名空间外部是不可见的,从而避免了全局作用域中的命名冲突。命名空间可以嵌套,形成层次化的作用域结构。

总结:1.展开头文件是预处理阶段的一个步骤,用于将头文件的内容插入到源文件中。
2.展开命名空间域是编译阶段的一个步骤,用于确定C++中命名空间内标识符的可见性和作用域。
3.两者都涉及到标识符的作用域和可见性,但发生在不同的编译阶段,并且服务于不同的目的。头文件更多地关注于提供编译所需的信息,而命名空间则更多地关注于代码的组织和封装。

6.static关键字

1.局部变量: 当static用于函数内部的局部变量时,它改变了这个变量的存储方式和生命周期。通常,函数内部的局部变量在函数被调用时创建,并在函数返回时销毁。但是,如果一个局部变量被声明为static,那么它只会被初始化一次,并且在函数调用之间保持其值。这样的变量存储在静态存储区,而不是栈区,因此它们的生命周期与程序的生命周期一样长。
2.全局变量: 在全局范围内声明的变量默认是具有外部链接的,这意味着它们可以在其他文件中通过extern关键字被访问。但是,如果全局变量被声明为static,那么它的链接将变为内部的,这意味着它只能在声明它的文件中被访问,而不能被其他文件访问。这有助于封装和减少不同文件之间的耦合。
3.函数: 类似于全局变量,函数默认也是具有外部链接的。但是,如果一个函数被声明为static,那么它只能在声明它的文件中被调用,而不能被其他文件调用。这有助于隐藏实现细节,并只允许通过预定义的接口来访问特定的功能。

7. 头文件的两种声明

**头文件中并不存储变量,头文件只是提供了一种方式,让你可以将声明(和有时定****义)插入到多个源文件中,**头文件展开后,其中声明的标识符(如函数、全局变量等)的作用域取决于它们在头文件中的声明方式。如果是全局声明,则它们的作用域是全局的;如果是静态声明,则它们的作用域仅限于包含该头文件的源文件。

全局声明
假设我们有一个头文件global_header.h,内容如下:

// global_header.h  
#ifndef GLOBAL_HEADER_H  
#define GLOBAL_HEADER_H  
  
int global_variable; // 全局变量声明  
  
void global_function(); // 全局函数声明  
  
#endif // GLOBAL_HEADER_H

这个头文件中声明了一个全局变量global_variable和一个全局函数global_function。由于它们是全局声明的,所以它们的作用域是全局的。这意味着,在包含了这个头文件的任何源文件中,都可以访问和修改global_variable,也可以调用global_function。

例如,在main.c中:

// main.c  
#include "global_header.h"  
  
int main() {  
    global_variable = 42; // 访问并修改全局变量  
    global_function(); // 调用全局函数  
    return 0;  
}

在这个例子中,main.c通过包含global_header.h获得了对global_variable和global_function的访问权限。

静态声明
现在,假设我们有一个不同的头文件static_header.h,内容如下:

// static_header.h  
#ifndef STATIC_HEADER_H  
#define STATIC_HEADER_H  
  
static int static_variable; // 静态变量声明  
  
static void static_function() { // 静态函数声明和定义  
    // 函数体...  
}  
  
#endif // STATIC_HEADER_H

这个头文件中声明了一个静态变量static_variable和一个静态函数static_function。由于它们是静态声明的,所以它们的作用域仅限于包含了这个头文件的每个单独的源文件。这意味着,如果多个源文件都包含了这个头文件,那么每个源文件都会有自己的static_variable副本和自己的static_function副本,这些副本之间是不共享的。

例如,在file1.c和file2.c中分别包含这个头文件:

// file1.c  
#include "static_header.h"  
  
void function_in_file1() {  
    static_variable = 1; // 访问并修改file1.c中的静态变量副本  
    static_function(); // 调用file1.c中的静态函数副本  
}
// file2.c  
#include "static_header.h"  
  
void function_in_file2() {  
    static_variable = 2; // 访问并修改file2.c中的静态变量副本,与file1.c中的副本不同  
    static_function(); // 调用file2.c中的静态函数副本,与file1.c中的副本不同  
}

在这个例子中,file1.c和file2.c都包含了static_header.h,但是它们各自有自己的static_variable和static_function的副本。修改一个源文件中的静态变量不会影响其他源文件中的静态变量。同样地,调用一个源文件中的静态函数也不会影响其他源文件中的静态函数。

8.流插入和流提取

需要注意的是,c++将头文件封装在命名空间域std中,在我们日常练习时,可以直接将头文件全部展开。不过在以后的项目中,还是尽量避免将头文件全部展开
在这里插入图片描述
流插入和流提取分别对应c中的printf和scanf函数

9.缺省参数和半缺省参数

在这里插入图片描述

这里我们一共需要注意三个问题
1.必须按顺序传,不能跳跃着传
2.半缺省只能从右往左缺省
3.缺省参数在声明给出,不能声明和定义同时给出

#include<iostream>
using namespace std;

namespace ZJ
{
	int i = 1;
	int j = 2;
	int a,b;

}
using namespace ZJ;

int Add(int x,int y)
{

	return x + y;

}

void F2(int a = 10, int b = 3, int c = 5)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl<<endl;
}
   
int Add(int x = 3, int y = 4);//声明


int main()
{
	F2(1, 2, 3);
	F2(1, 2 );
	F2(1  );
	int tmp = Add();
	cout << "tmp = " << tmp << endl;
	return 0;
}
tmp = 7

而半缺省参数是指在函数声明或定义中,部分变量是缺省参数

学习的时光总是短暂而有趣的,期待我们的下一次再会,再见啦!

  • 30
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: " PDF 是一种常用的电子文档格式,它可以在不同平台和设备上进行查看和共享。使用 PDF 格式的好处有很多。 首先,PDF 可以保留文档的格式和布局,无论显示在何种操作系统、软件或设备上,用户都可以看到一致的显示效果。这对于保持文档的可读性和可理解性非常重要,尤其是涉及到复杂的排版和图文混排的文档。 其次,PDF 支持多种媒体类型的嵌入,如图片、音频和视频等。这使得 PDF 文档更加丰富和交互,可以通过插入音频和视频来呈现更直观的信息和演示效果。这对于教育和商务等领域非常有用。 此外,PDF 文档还可以进行密码保护和授权,以确保文档的安全性。用户可以设置只有特定人员才能访问和编辑文档,保护敏感信息和知识产权。这对于企业和个人而言,是非常重要的功能特性。 最后,使用 PDF 格式可以减少文件大小,节省存储空间和网络传输带宽。PDF 格式使用无损压缩算法,可以将文件大小大幅缩小,同时不会丢失文件的质量和清晰度。这使得传输和存储文件更加高效,并能节省成本。 综上所述,PDF 格式具有保持文档格式一致性、支持多媒体的插入、提供安全保护、以及文件大小压缩等多种优点。因此,使用 PDF 格式可产生很多积极的影响,并在各种场景下得到广泛应用。 " ### 回答2: Effect C是一款广泛应用于计算机领域的PDF编辑器。PDF(Portable Document Format)是一种用于文档交换和存储的文件格式。它的优点在于跨平台兼容性强、保持文档格式稳定、能够保护文档内容的完整性等。 Effect C作为一款PDF编辑器,具有许多实用的功能。首先,它可以打开和查看PDF文件,使用户能够直观地了解文档的内容。其次,用户可以利用Effect C编辑PDF文件,例如插入、删除或重新排列页面。此外,它还允许用户在PDF文件中添加注释、批注和书签,方便其他用户查看和阅读。 Effect C还提供了一些高级编辑功能。例如,用户可以使用它来合并多个PDF文件,将它们合并成一个文件。此外,它还支持将PDF文件转换为其他格式(如Word、Excel等)和从其他格式(如图片)转换为PDF。这些功能在日常工作和学习中非常实用,能够提高效率和便捷性。 除了编辑功能,Effect C还具备一些保护PDF文件的功能。用户可以使用密码来加密PDF文件,以防止未经授权的访问和修改。此外,Effect C还可以通过数字签名来验证PDF文件的真实性和完整性,确保文档的可信度。 总体而言,Effect C是一款功能强大、易于使用的PDF编辑器。它能够满足用户在PDF文件处理方面的多样需求,并提供了一系列实用工具和功能,帮助用户更好地管理和处理PDF文件。无论是在个人使用还是商务环境中,Effect C都是一款非常有价值的软件。 ### 回答3: Effect C是一种常用的PDF文件格式。PDF是Portable Document Format(便携式文档格式)的缩写,它是一种用于电子文档存储和传输的文件格式,具有跨平台和保持文档格式不变的特点。 Effect C是指PDF文件自带的一种特效,可以为PDF文档添加各种视觉效果和动画效果。通过应用Effect C,用户可以为PDF文档添加平滑过渡效果、淡入淡出效果、放大缩小效果、旋转效果等,使得文档更具吸引力和交互性。这些效果可以增加PDF文件的可读性和可视性,使得文档更加生动和直观。 使用Effect C可以为PDF文档增添各种视觉效果,展示出更丰富的内容和更好的用户体验。例如,在演示文稿中,可以使用平滑过渡效果将幻灯片之间的内容切换得更加流畅,吸引观众的注意力。在电子书中,可以使用淡入淡出效果为页面之间的转换增加过渡效果,提升阅读体验。 然而,需要注意的是,过多或不适当地使用Effect C可能会影响PDF文件的可读性和性能。过多的动画和特效可能会分散读者的注意力,降低他们对文档内容的理解和关注。此外,过多的特效可能会使得文件体积增大,加载和显示速度变慢。因此,在使用Effect C时,应根据实际需求和读者的期望来适度使用,以确保最佳的阅读体验。 综上所述,Effect C是一种为PDF文档添加特效的功能,可以使文档更具吸引力和交互性。合理使用Effect C可以提升PDF文件的可读性和可视性,提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值