初识C++(1)---C++入门


前言

终于进入到了C++的学习了,让我们先简单了解一下什么是C++吧。

C++是一种面向对象的语言,

是1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,

所发明的一种新的程序语言。所以呢,C++是基于C语言而产生的。

C++经过这么多年的发展,已经衍生出许多的历史版本,

我们主要学习的就是C++98C++11这两个版本。

好了,关于C++的发展历史大概说到这里,下面开始真正开始C++学习之旅吧,希望每一位学习C++语言的同学都能一起进步,加油吧!


C++关键字

我们先简单的看一下C++都有哪些关键字吧,刚开始学习,不必对关键字的具体含义深究,了解即可。有需要的同学可以收藏一下这个表格。

asmdoifreturntrycontinue
autodoubleinlineshorttypedeffor
booldynamic_castintsignedtypeidpublic
breakelselongsizeoftypenamethrow
caseenummutablestaticunionwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexportnewstructusingfriend
classexternoperatorswitchvirtualregister
constfalseprivatetemplatevoidtrue
const_castfloatprotectedthisvolatilewhile
deletegotoreinterpret_cast

命名空间

我们在学习C/C++的时候,所学的变量函数,包括以后要学习的

在真正的工程项目中(代码量很多),都是大量存在的,

这些变量、函数和类的名称都存在于全局的作用域中,可能会导致很多命名上的冲突,

比如在公司的项目协作中,一个任务分派给很多个人写,

这时我们写的函数或者变量等名称就可能会冲突。

所以C++就产生了namespace这个关键字,也就是命名空间,用来作隔离

那命名空间怎么使用呢?请看下面的代码

namespace wyc  //wyc为命名空间的名称
{
	//在这里写命名空间的内容,可以定义变量、函数等
	int a;
	void swap(int* px,int* py)
	{
		int tmp = *px;
		*px = *py;
		*py = tmp;
	}
	//...
}

不仅如此,命名空间还可以嵌套,也就是说,在一个命名空间里可以定义另一个命名空间

//命名空间的嵌套
namespace wyc  //wyc为命名空间的名称
{
	//在这里写命名空间的内容,可以定义变量、函数等
	int a;
	void swap(int* px, int* py)
	{
		int tmp = *px;
		*px = *py;
		*py = tmp;
	}
	namespace NEXT
	{
		int b;
		int c;
		int Add(int x, int y)
		{
			return x + y;
		}
	}
	//...
}

在同一个工程的不同文件中,可以存在相同名称的命名空间,

最后编译的时候编译器会把它们合成到同一个命名空间中去。

这很好理解,我就不写出代码了。

我们需要注意的是:

每一个命名空间都定义了一个新的作用域,命名空间中的所有内容都被限定在该命名空间中,

所以这就能产生隔离的效果,有效避免了命名冲突和污染。

现在我们知道了命名空间如何定义,那么这么使用它里面的成员呢?

命名空间的使用有三种方式

//方式1:加命名空间名称及作用域限定符(::)
int main()
{
	//现在我想调用swap函数
	int x = 10, y = 20;
	wyc::swap(&x, &y);
	printf("x=%d y=%d\n", x, y);
	return 0;
}
//方式2:使用using将命名空间中成员引入
using wyc::swap;
int main()
{
	//现在我想调用swap函数
	int x = 10, y = 20;
	swap(&x, &y);
	printf("x=%d y=%d\n", x, y);
	return 0;
}
//方式3:使用using namespace + 命名空间名称引入
using namespace wyc;
int main()
{
	//现在我想调用swap函数
	int x = 10, y = 20;
	swap(&x, &y);
	printf("x=%d y=%d\n", x, y);
	return 0;
}

需要注意的是:

方式3相当于把命名空间全部展开了,

这时候命名空间中的内容就相当于是全局的变量,命名空间也失去了隔离的作用,

我们在平时练习代码的时候可以使用方式3展开命名空间,但是在做项目的时候要慎用这种方法。

比如,我们都知道,一个C++的程序,开头的代码一般是以下两句

#include <iostream>
using namespace std;

std是C++的一个库,也是封装在命名空间里,这样展开是为了方便我们使用,

否则我们每次使用C++的输入输出,即cout和cin时,每次都要在前面加上作用域限定符,比较麻烦。


缺省参数

缺省参数是声明或定义函数时,为函数的参数指定一个默认的值,

所以有时也叫默认参数,在调用该函数时,如果没有指定实参,则使用默认的值,如果指定,就使用指定的实参。

//缺省参数
void Print(int x = 10)
{
	cout << x << endl;
}
int main()
{
	Print();//不传参,使用默认值
	Print(20);//传参,使用实参
	return 0;
}

缺省参数又可以分成全缺省参数半缺省参数

全缺省参数是指函数参数全部都有默认值

//全缺省参数
void Print(int x = 10,int y = 20,int z = 30)
{
	cout << x << endl;
	cout << y << endl;
	cout << z << endl;
}
int main()
{
	//几种调用的方式
	Print();
	Print(1);
	Print(1, 2);
	Print(1, 2, 3);
	return 0;
}

半缺省参数不是说缺省一半的参数,而是部分缺省

//半缺省
void Print(int x, int y, int z = 30)
{
	cout << x << endl;
	cout << y << endl;
	cout << z << endl;
}
int main()
{
	//几种调用的方式
	Print(1, 2);
	Print(1, 2, 3);
	return 0;
}
//这种缺省是错误的
void Print(int x, int y = 20, int z)
{
	cout << x << endl;
	cout << y << endl;
	cout << z << endl;
}

注意:

1)半缺省参数必须从右往左连续缺省,不能间隔缺省

2)缺省参数不可以同时在函数的声明和定义中同时出现,

否则如果正好两边给的默认值不同,编译器就不知道用哪个值了。

3)缺省值也就是给定的默认值必须是常量或者全局的变量

4)C语言不支持缺省参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值