C++之命名空间,程序在翻译过程中的四个步骤,函数重载,缺省参数

本文详细介绍了C++中的命名空间概念及其避免名称冲突的作用,通过实例展示了命名空间的嵌套使用。此外,阐述了程序翻译的四个步骤——预处理、编译、汇编和链接。接着,探讨了C++中的函数重载原理,对比了C语言与C++在函数寻址上的差异。最后,讲解了C++中的参数缺省,包括半缺省和全缺省的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

今天,我们进入了C++的学习之旅。首先,我们来写一个简单的代码:

#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
	cout<<"hello,C++"<<endl;
	system("pause");
	return 0;
}

下面我们展开来讲述一下上面每一步的含义:

<strong>如果我们不使用using namespace std;
std:标准库中所有得对象都在std中;
那么,我们就要在输出的时候这样输出:std::cout<<"hello,C++"<<std::endl;</strong>

 

下面我们重点来讲述一下命名空间:namespace

我们知道,在一个函数中不可以同时使用名称相同的变量:因为名称如果相同,在使用时就不知道访问存储的是哪一块空间。

所以C++中引入了namespace用来避免由于名称相同而带来的麻烦:下面我们通过一个例子来看看:

namespace P  //定义自己的命名空间
{
	int beg = 20;
}
int main()
{
	int beg = 10;
	cout<<beg<<endl;
	cout<<P::beg<<endl;   //这样就可以有效的区分beg变量了。有一点点像C语言中的数据结构。
	system("pause");
	return 0;
}

不但如此,namespace还可以嵌套使用。例如:

using namespace std;
namespace P  //定义自己的命名空间
{
	int beg = 20;
	namespace Q
	{
		int beg = 30;
	}
}
int main()
{
	int beg = 10;
	cout<<beg<<endl;
	cout<<P::beg<<endl;
	cout<<P::Q::beg <<endl;
	system("pause");
	return 0;
}

 


运行结果为:

好,现在我们来复习一下程序在翻译过程中的四个步骤:

①预处理:作用是:1.头文件的展开2.去注释3.宏替换4.条件编译

②编译:作用:把C语言翻译为汇编语言

③汇编:作用:汇编语言并不能被计算机识别,所以汇编就是把汇编语言编程二进制语言

④链接:作用:当程序变大变多时,就会出现很多文件,但是在链接前那些文件并没有交汇,链接就是把所有文件聚集然后生成一个可执行文件。

以上就是一个程序跑起来的所有步骤。

下面我们来讲C++中的重载函数:重载函数:就是函数名称相同,但是函数的参数个数以及参数类型不同(函数返回值可相同也可不同)。

using namespace std; 
int Sub(int a,int b) 
{ 
    return a - b; 
} 
int Sub(int a,int b,int c) 
{ 
    return a - b - c; 
} 
float Sub(float a,float b) 
{ 
    return a - b; 
} 
int main()    
{ 
    int a = 3; 
    int b = 5; 
    int c = 1; 
    float a1 = 3.5; 
    float b1 = 2.1; 
    cout<<Sub(a,b)<<endl; 
    cout<<Sub(a,b,c)<<endl; 
    cout<<Sub(a1,b1)<<endl; 
    system("pause"); 
    return 0; 
}

那么,为什么在C语言中却没有函数重载呢?而C++却可以。

首先我们要明白,程序在编译的过程中,当从C语言转变为汇编语言时,其实是由函数的名称去查找函数的地址,那么当函数名相同时,寻找地址时那不就无法找到那个正确的函数。但是在C++中函数名在汇编中保存的形式并不是函数名,而是添加了前缀和后缀的名称。下面我们就来见证一下这个奇迹的时刻:

在VS2010下我们可以这样查看:

先右击文件名,然后点开属性。。。。。。。最后打开Debug个终究可以看到后缀为.map的文件,打开就可以找到:如下图所示:

我们看到,在C++中函数名在汇编中并不是以名称存在,所以C++有重载函数,而C语言没有。

接下来我们来讲参数缺省:分为半缺省和全缺省(半缺省参数只传一部分,而全缺省所有的参数都不传)代码和讲解如下图所示:

以上都是在Vs2010的环境下编译的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值