C++基础精讲篇第1讲:输入输出流+命名空间+缺省参数

     今天这一讲开始为读者们开辟关于C++的专栏,作为C++基础篇的第一讲,我们需要学好C++必须掌握的知识点,内容会比较繁多,希望读者们同博主一起坚持把C++学好,加油!!!

C++基础精讲篇第1讲思维导图

目录

1、关键字

2、C++输入流&输出流

3、命名空间

3.1 命名空间的定义

3.2 命名空间的使用

1、采用命名空间名称及作用域限定符

2、使用using将命名空间中成员引入

3、使用using namespace将命名空间展开

4、使用命名空间的建议

4、缺省参数

4.1 全缺省参数

4.2 半缺省参数

4.3 缺省参数在栈中的运用

4.4 缺省参数使用注意事项 

5、总结



1、关键字

      C++关键字总计有63个,C语言有32个关键字。这些关键字不会在本文一一讲解,列出的目的是为了让读者们能对C语言和C++的关键字组成有一定的认识,最终这些关键字我会在后面的文章中陆续涉及并讲解,那样读者们才能针对具体场景并有了一定基础以后,理解得更深刻,也更具有意义。

asmdoifreturntrycontinue
autodoubleinlineshorttypedeffor
booldynamic_castintsignedtypeidpublic
breakelselongsizeoftypenamethrow
caseenummutablestaticunionwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexportnewstructusingfriend
classexternoperatorswitchvirtualregister
constfalseprivatetemplatevoidtrue
const_castfloatprotectedthisvolatilewhile
deletegotoreinterpret_cast

2、C++输入流&输出流

     C++这里所指的输入流和输出流的作用同C语言中的scanf函数和printf函数一样,下面先带大家用代码比较着理解:

输入输出程序比较(左图C++;右图C语言)

        通过上图提供的代码对比,可以看出,在C++中有自己独特的风格,C语言大家已经很熟悉了,下面我重点介绍C++的输入流和输出流:

1、cout:表示控制台标准输出。其作用同printf函数一样,都是不同语言对应的标准输出,通俗来讲就是我们可以在屏幕上观察我们想要的结果;

2、<<:流插入运算符。可近似理解成将变量从屏幕中打印出来,从运算符的右向左理解;

3、endl:表示换行符,和C语言中的'\n'的功能一致;

4、cin:表示控制台标准输入。其作用同scanf一样,可以从键盘上输入指定的数据、字符等;

5、>>:流提取操作符。可近似理解成将键盘输入的内容到指定变量中,从运算符的左向右理解。

       除此以外,C++的输入输出流需要包含头文件:#include<iostream>,以及用std标准命名空间,关于命名空间将在后面讲到。

        另外值得大家注意的就是,C++中相比C语言输入输出更方便,不需要考虑数字格式,语言本身会自动识别。比如%d--整型;%c--字符型等。

3、命名空间

      在C/C++中,变量、函数和C++中特有的类等都是大量存在的,这些变量、函数和类的名称都将存在于全局作用域中,可能会导致很多冲突。C++中使用命名空间的目的就是对标识符的名称进行本地化,以避免命名冲突或名字污染。

      C++中的关键字namespace就是针对这一问题而出现的,下面带着大家重点学习。

3.1 命名空间的定义

      关键字:namespace + 用户自定义的命名空间名称,然后接一对“ {} "即可。" {} "中为命名空间的成员。

namespace King_lm_Guard // King_lm_Guard为命名空间的名称
{
	// 命名空间中的内容,既可以定义变量,也可以定义函数
	int a;
	int Add(int left, int right)
	{
		return left + right;
	}
	//命名空间嵌套调用
	namespace N1
	{
		int c;
		int d;
		int Sub(int left, int right)
		{
			return left - right;
		}
	}
}
//允许同名空间
namespace King_lm_Guard
	{
		int Mul(int left, int right)
		{
			return left * right;
		}
	}

        如上述程序所示," {} "中可以定义变量可以定义函数,也可以将命名空间嵌套调用,并且,在同一个项目中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间处理 

3.2 命名空间的使用

1、采用命名空间名称及作用域限定符

      如下图所示,因为rand函数在C++中已经定义过了,所以如果我们需要采用这一名称,则需要采用命名空间附加定义。

      在下图的程序中可以看到:使用namespace创建了命名空间zk,然后在其空间内部重定义了rand,为了大家理解,因为C++兼容C语言语法,所以我就先采用printf函数打印rand,会发现第一个printf打印的值不是我们想要的,这是因为我们自己定义的rand的作用域只在zk内,出了该作用域就不可以了,为此此时打印的值是C++中已经定义的rand,所以打印出来的不是我们想要的

     而第二个printf打印的时候,我在程序中使用了" zk::rand ",此时打印出来的就是我们想要的结果,这种程序书写格式就是命名空间使用的方法之一,“ :: ”是作用域限定符

namespace zk
{
	int rand = 0;
}

int main()
{
	printf("%d\n", rand);
	printf("%d\n", zk::rand);

	return 0;
}

2、使用using将命名空间中成员引入

using N::a该功能可将常用的变量函数等展开,比如:using std::cout;using std::cin;
using N::b;
int main()
{
printf("%d\n", N::a);
printf("%d\n", b);
return 0;
}

3、使用using namespace将命名空间展开

using namespce N;
int main()
{
printf("%d\n", N::a);
printf("%d\n", b);
Add(10, 20);
return 0;
}

4、使用命名空间的建议

  1. 尽量不要用using namespace std 这种类型,也就是上面的方法3;
  2. 日常练习可以使用 using namespace ;
  3.  在项目中使用时可指定命名空间访问或者展开常用的变量或者函数或者其他等。

      补充:C++的所有变量都在命名空间" std "中,比如第二讲关于C++的输入流和输出流,使用的cout、cin、endl等都是属于这个空间中的内容,读者们可以发现我在前面使用的时候采用了第3种方法,即将std完全展开使用,下面我将前面的3种方法都演示一遍。

命名空间使用方法1
命名空间使用方法2
命名空间使用方法3

4、缺省参数

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

//缺省参数
using namespace std;
//为函数的参数指定一个默认值
void Func(int a = 0)
{
	cout << a << endl;
}

int main()
{
//没有为函数传参时,使用参数的默认值,即a=0;
     Func();
//指定参数传参时,则使用指定的实参
     Func(10);
}
缺省参数概念

4.1 全缺省参数

//全缺省参数:即函数需要指定的参数组成全部都设置有默认值
void TestFunc(int a = 10,int b=20,int c=30)
{
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "c=" << c << endl << endl;
}

int main()
{
	//传参时必须从左向右给值
	TestFunc();
	TestFunc(1);
	TestFunc(1,2);
	TestFunc(1, 2, 3);
	return 0;
}
全缺省参数

4.2 半缺省参数

//半缺省参数:指缺省部分参数
//缺省参数必须从右往左连续缺省,不能间隔
void TestFunc1(int a, int b = 20, int c = 30) 
{
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "c=" << c << endl << endl;
}

int main()
{

	TestFunc1(1);
	TestFunc1(1,2);
	TestFunc1(1, 2,3);

	return 0;
}
半缺省参数

4.3 缺省参数在栈中的运用

    在以前我们写顺序表或者栈的时候,需要扩容,所以我们需要预先开辟一定的空间,在这里不懂顺序表的读者们可以阅读我前段时间写的一文线性表—顺序表相关知识点讲解(关于栈的使用我后面将会在数据结构与算法专栏中抽时间跟上),因为涉及到扩容,初始化的时候我们可以自定义扩容一定的空间,比如16个字节的空间等,但这种方式仍然会有一定的不足,于是在这里,因为使用了C++,所以我们可以利用缺省参数的功能。

     同样我们可以预先给定一个初始值,如程序中的capacity=4,但当我们在使用栈时已经确定会插入一定的数据量,比如1000个整型,那我们可以直接传参,这样就可以减少不够在扩容,不够再扩容的行为,因为每一次扩容计算机的运行速度会下降,利用缺省参数可以极大地提高计算机处理效率。

//缺省参数在栈中的运用
struct Stack
{
	int*a;
	int top;
	int capacity;
};

void StackInit(struct Stack*ps, int capacity = 4)
{
	ps->a = (int*)malloc(sizeof(int)*capacity);
	ps->top = 0;
	ps->capacity = capacity;

}

int main()
{

	//当知道一定会插入100个数据,就可以显示传参数100;
	//利用缺省参数,提前开辟默认空间,插入数据避免扩容
	struct Stack st1;
	//StackInit(&st1, 100);
	StackInit(&st1);
	return 0;
}

4.4 缺省参数使用注意事项 

1、全缺省参数要保证从左向右给值;

2、半缺省参数必须从右向左依次来给出,不能间隔着给值;

3、缺省参数不能在函数声明和定义中同时出现,分离定义时,声明给出缺省参数,如果缺省参数不在函数声明中给出,而是在函数定义中给出,则不起作用。

5、总结

      今天这一讲是C++基础篇的第一讲,我将基于C语言,将C++扩充的基础概念先带大家熟悉,这样便于后面带着大家学习C++的类和对象,由于时间有限,C++剩下的基础概念在后面的章节中陆续整理出来。欢迎大家点赞、支持、关注!!!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值