【C++】C到C++做出的改变(1)

一.C语言与C++之间的联系

1.C语言是结构化和模块化的语言,适合处理较小规模的程序,对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。我们的C++祖师爷Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一 种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而 产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的 程序设计,还可以进行面向对象的程序设计。

二.命名空间

在C语言中,解决不了命名冲突的问题,什么是命名冲突呢?就比如下面一段代码

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

int rand = 0;

int main()
{
	printf("%d \n", rand);
	
	return 0;
}

//error C2365: “rand”: 重定义;以前的定义是“函数”

​

 当此代码运行时就会报错:“rand”: 重定义;以前的定义是“函数”,这是因为,stdlib.h这个文件中包含了以后rand()的函数而编译器默认查找是先在局部域中,让后再到全局域中查找,所以,在编译链接的时候,头文件会展开,头文件里面的rand就跟我们全局的rand冲突了,这就是命名冲突.这就是C语言的问题之一.那么谁跟谁会产生命名冲突呢,形象的说,就是(我们和库,我们之间).

2.1命名空间定义

这时我们C++祖师爷为了解决这个问题,创建namespace关键字.定义命名空间,后面跟命名空间的名字,然后接一对{}里面即为命名空间的成员,这个空间即为命名空间域.

现在我们如何来解决命名空间冲突问题呢,我们接着看下下面一段代码:

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

namespace bit
{
	int rand = 0;

}

int main()
{
	//因为编译器默认访问局部域,全局域,
	//所以会打印头文件中rand的地址
	printf("%p \n", rand);
	//因为编译器默认访问局部域,全局域,
	//所以如果要访问命名我们就先要(名字+::)
	//所以就会打印命名空间域中的rand
	printf("%d \n", bit::rand);

	return 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值