【c++】入门

空间命名

#include<iostream>
using namespace std;
int main()
{
	cout<<"hello world"<<endl;	
	return 0;
}

这是一段c++代码,代码中using namespace std,表示将一个名为std的空间里的成员全部展开,而namespace是一个关键字,用来定义命名空间。

namespace 空间名字
{
	空间成员
}

比如:

#include<iostream>
using namespace std;
namespace r
{
	int a=1;
}
int main()
{
	cout<<r::a<<endl;
	return 0;
}

运行这段代码将会在屏幕上输出"hello world",在输出语句中,我们用到了::<<>>符号,::这个符号叫作用域限定符,另外两个符号下文会讲到。

在c语言学习中,我们学到了“全局域”和“局部域”,在c++中我们又将学到"命名空间域"和“类域”,在本文中我们只讲解“命名空间域”,类域在后面会讲到。

namespace本质上是定义了一个域,这个域是跟全局域独立开来的,或者说有命名空间域就是为了与全局域隔离开来。

#include<stdio.h>
#include<stdlib.h>
int rand=1;
int main()
{
   printf("%d\n",rand);
  return 0;
}

这段c语言代码编译时编译会不通过,因为全局变量rand与库函数rand()命名冲突,此时如果我们使用namespace就能很好的解决这个问题。(namespace属于c++关键字如果在.c文件下使用将会报错)

#include<stdio.h>
#include<stdlib.h>
namesapce r
{
  int rand=0;
}
int main()
{
   printf("%d\n",r::rand);//这里如果不使用命名域隔离开,会报错,因为域stdlib.h头文件中的函数产生命名冲突
  return 0;
}

域做到了名字隔离。与全局变量进行隔离

多文件namespace名字相同

在多文件中,namespace命名的同名空间会被认为是同一个,不会冲突。
.h文件下
在这里插入图片描述
.c文件下
在这里插入图片描述
最终运行结果
在这里插入图片描述
成功运行并且结果正确。

现在回到开头看到的那段代码:

#include<iostream>
using namespace std;
int main()
{
	cout<<"hello world"<<endl;	
	return 0;
}

这里我们展开了一个std域,这个域里面包含了c++标准库。若没有展开这个域,那这段代码将写成这样:

#include<iostream>

int main()
{
	std::cout<<"hello world"<<std::endl;	
	return 0;
}

我们了解了::接下来我们在讲讲<<>>以及coutendl还有cin

c++输入输出

c++标准库都放在一个叫std的命名空间里面
是 Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输
出对象。

#include<iostream>
int main()
{
	std::cout<<"hello world"<<std::endl;
	return 0;
}

cout是输入流,cin是输出流,输出语句的末尾加上endl在语句输出时会自动加上一个换行符。
<<时流插入符,>>是流提取符,c++输入输出语句相比较c语言,省去了指定类型的过程,更加方便

关于代码中std,这是因为没有展开std域,所以需要通过作用域限定符来使用域中的成员。
在这里插入图片描述
通过cin读取数据,再通过cout输出数据。在读取时,cout会自动的将字符串转换成相应类型,输出时又会自动将数据转换成字符串,这个过程现在不需要深入了解,只需要会使用cout与cin就行。

函数重载

(c语言不支持)
函数重载:函数名相同,但参数类型,个数不同。
类型不同:

int fun(int a,int b)
{
	return a + b;
}

int fun(int a,double b)
{
	return b + a;
}

个数不同:

int fun(int a,int b)
{
	return a + b;
}

int fun(int a)
{
	return  a;
}

返回值不同能不能构成重载?答案是:不能。
看下面这段代码:

int fun(int a=1,int b=1)
{
	return a + b;
}

double fun(int a=2,int b=2)
{
	return b + a;
}

int main()
{
  fun();//调用函数不传参,不接收返回值,这样就不知道你调用的是那个函数了
    return 0;
}

再来看一段代码:思考一下它构成重载吗?

void fun()
{
  cout<<"f()"<<endl;
}

void fun(int a=1)
{
  cout<<"f(int a)"<<endl;
}
//不构成重载,因为存在歧义,当不传入参数时,编译器不知道你调用的是那个函数

引用

引用就是给变量取别名。

int a=0;
int& b=a;
//还可以给别名取别名
int& c=b;
int& d=c;//&叫做引用,不是取地址,如果写成int* p=&a,这就是取地址

虽然取了别名,但是它们代表的还是同一块空间,只是名字多了些“外号”,就比如:孙悟空又叫齐天大圣,弼马温,孙行者,行者孙。名字虽多,但是都表示孙悟空这一个猴。引用也是如此。

typedef与引用的区别:与typedef的区别:typedef是给类型取别名,而&是给变量取别名

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值