c++学习日记(一)

                                                               《祖师爷保佑》

嗯,终于是熬过了c和数据结构,没有时间为他们悲伤了现在来到战场的是c++。可喜可贺今天又开了一个大坑。

我们在应用c语言时如果工程量比较大的时候,会有很多的变量或是函数名,但是一个应用的设计和通常不是一个程序员一手完成的,这时候如果另一个人误用了前面人已经使用过的名称。好好好这时候就麻烦了,这也是c语言的毛病,发明c++的人也发现了这个毛病,所以采用一定的改变来优化。采用了一个名称空间的东东来优化,下面我们一起来了解一下

名称空间

定义:

名称空间是一种c++支持的特性,在编写大型程序时将多个厂商的代码整合起来,它还有利于整合程序。

#include <iostream>
using namespace std;
namespace N
{
	int a = 10;
}

int main()
{
	cout << N::a;

}

最简单的命名空间,命名空间的关键词namespace,命名空间顾名思义是一块空间,可以存放变量,函数,类型。在c语言中只有两种空间,全局空间和局部空间,如果对这两名词不熟悉,在全局空间放置的变量是全局变量,在局部空间放置的变量是局部变量。

首先这三个空间在使用时是有一定的次序的,比如说你使用了一个变量a,机器就会去找这个变量a,先从局部空间找,局部空间找不到去全局空间找,全局空间找不到去名称空间找。但在去名称空间找的时候只能去加上作用域限定符的名称空间找。举个栗子:中午吃饭去你家的自留地里拔菜,自留地里没有就去野外看看有没有野菜,野外也没有。但是你看见隔壁老王家里有,但是你不能想去就去,如果老王插了一个牌子说,地里菜多邻居自取。哎,这时候你就可以去拿了。

和上面的代码联系一下:main函数内->自留地     整个代码范围内->野地  N命名空间->老王家的地

大家看下面的代码如果我们要多次用到a变量就会变得很繁琐,每次都要加上作用域限定符,接下来介绍命名空间的几种玩法

#include <iostream>
using namespace std;
namespace N
{
	int a = 10;
}

int main()
{
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
	cout << N::a;
}

命名空间的使用方式

1.特定命名空间成员引入

#include <iostream>
using namespace std;
namespace N
{
	int a = 10;
}

int main()
{
	cout << N::a;
}

2.使用using将命名空间中某个成员引入

#include <iostream>
using namespace std;
namespace N
{
	int a = 10;
}

using N::a;

int main()
{
	cout << a;
}

3.使用using将命名空间中全部成员引入

#include <iostream>
using namespace std;
namespace N
{
	int a = 10;
}

using namespace N;

int main()
{
	cout << a;
}

C++输入输出

输出

输出关键字count,包含在头文件iostream中的std命名空间中

插入运算符<<(运算符重构)

输入

输出关键字cin,包含在头文件iostream中的std命名空间中

插入运算符>>(运算符重构)

C++的输入输出功能十分强大,但在这里不细说,仅了解基础的输入输出方法

特别的注意

std是C++标准库的命名空间,如何展开std使用更合理呢?
1. 在日常练习中,建议直接using namespace std即可,这样就很方便。
2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对
象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模
大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 +
using std::cout展开常用的库对象/类型等方式。

缺省参数

定义

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

例子

这个定义很好理解直接上代码:

//不省参数
#include <iostream>
using namespace std;

void Add(int a=1,int b=2)
{
	cout << a + b;
}

int main()
{
	int x = 10, y = 20;
	Add(x, y);
}

//半缺省参数
#include <iostream>
using namespace std;

void Add(int a=1,int b=2)
{
	cout << a + b;
}

int main()
{
	int x = 0;
	Add(x);
}
//全缺省参数
#include <iostream>
using namespace std;

void Add(int a=1,int b=2)
{
	cout << a + b;
}

int main()
{
	
	Add();
}

函数重载

是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。

分类

1、参数类型不同

int Add(int left, int right)

int Add(double left, double right)

2、参数个数不同

int Add(int a, int b)

int Add(int a, int b,int c)

 3、参数类型顺序不同

int Add(int a, double b)

int Add(double a, int b)

 所有的重载分类只有以上三种,不知道有没有敏锐的同学发现其中的一些规律

1.所有分类都和形参有关

2.所有的分类和返回类型无关

这里的过程与编译器的编译链接密不可分..............

ps:我对其中的过程也是一知半解的状态,但是过程不了解没关系,以下的结论是十分重要的

C语言在链接阶段直接使用函数名,C++在链接时会对函数名进行修饰,编译器将函数参数类型信息添加到修改后的名字中,所以说形参类型的不同决定了C++编译时函数名的不同,但是函数名的修饰与返回类型无关所以,类型的不同决定了重载分类的基础。

ok了兄弟们今天的学习也是结束了,祝看到这里的同学平安喜樂 萬事勝意 祝你 祝我 祝我們

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值