C++基础——(命名空间、输入/输出、缺省函数、函数重载)

一、命名空间

看个栗子:

#include<iostream>
#include<stdlib.h>  //rand在此头文件中被定义为函数


int rand = 0;   //全局变量

int main()
{
	printf("%d", rand);   //打印全局变量
	return 0;
}

运行结果:

错误信息: “rand” : 重定义;以前的定义是“函数”;

结论:

因为C语言无法解决这种命名冲突的问题,所以C++建立了命名空间来解决冲突问题;

命名空间的定义

定义命名空间,需要用到namespace关键字,后面跟命名空间的名字,然后接一对{},{}即为命名空间的成员;

命名空间的作用

对标识符的名称进行本地化,以避免命名冲突或者名字污染;

对上面的栗子加以修改:

#include<iostream>
#include<stdlib.h>


namespace bit   //bit为命名空间的名字,一般开发中用项目名字做命名空间名
{
	int rand = 0;    //定义变量

	int Add(int left, int righr)   //定义函数
	{
		return left + right;
	}

	struct Node       //定义类型
	{
		struct Node* next;
		int val;
	};
	//命名空间可以定义变量、函数、类型
}
int main()
{
	printf("%d", bit::rand);   //bit::rand为命名空间使用的形式之一
	return 0;
}

运行结果:
在这里插入图片描述

命名空间使用的三种形式

第一种方式:

int main()
{
	printf("%d", bit::rand);  //加命名空间名称及作用域限定符
	return 0;
}

第二种方式:

using bit::rand;   //使用using将命名空间的某个成员引入  
int main()
{
	printf("%d", rand);
	return 0;
}

第三种方式:

using namespace bit;   //使用using namespace命名空间名称引入
int main()
{
	printf("%d", rand);
	return 0;
}

二、C++输入输出

栗子:

#include <iostream>

using namespace std;     //std是C++标准库的命名空间,C++将标准库的定义实现都放在这个命名空间中

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

运行结果:
在这里插入图片描述

说明

1、使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含头文件以及按照命名空间使用方法使用std。
2、cout和cin时全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含头文件中。
3、<<是流插入运算符,>>是流提取运算符。
4、使用C++输入输出更方便,不需要像printf/scanf那样手动控制格式。C++的输入输出可以自动识别类型。
5、实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及到运算重载符等知识。

三、缺省函数

缺省函数的概念

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

栗子:

#include<iostream>

using namespace std;


void fun1(int a = 0)
{
	cout << a << endl;
}

int main()
{
	fun1();        //没有传参时,使用参数的默认值
	fun1(10);		//传参时,使用指定的实参

	return 0;
}

运行结果:
在这里插入图片描述

缺省参数的分类

全缺省参数

void func(int a = 12, int b = 7, int c = 6)
{
	cout << "a=" <<a << endl;
	cout << "b=" <<b << endl;
	cout << "c=" <<c << endl;
}

半缺省函数

栗子1:

void func(int a , int b = 5, int c = 20) //半缺省函数必须从右往左以此给出,不能间隔给
{
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "c=" << c << endl;
}

栗子2:

A.h   //函数声明文件
void func(int a = 10) {};

A.c   //函数定义文件
void func(int a = 20) {}; 

 //缺省参数不能在函数声明和定义中同时出现

补充说明:

1.缺省值必须时常量或者全局变量
2.C语言不支持(编译器不支持)

四、函数重载

函数重载的概念

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

函数重载的三种类型

1.参数类型不同

栗子:

#include<iostream>

using namespace std;


int Add(int left, int right)
{
	cout << "int Add(int left,int right)" << endl;

	return left + right;
}

double Add(double left, double right)
{
	cout << "double Add(int left ,int right)" << endl;
	return left + right;
}
int main()
{
	Add(10.20);
	Add(10.0,20.0);
	
	return 0;
}

运行结果:
在这里插入图片描述

2.参数个数不同

栗子:

void func()
{
	cout << "func()" << endl;
}
void func(int a)
{
	cout << "func(int a)" << endl;
}
int main()
{
	func();
	func(10);
	
	return 0;
}

运行结果:
在这里插入图片描述

3.参数类型顺序不同

栗子:

void func(int a, double b)
{
	cout << "func(int a,double b)" << endl;
}
void func(double b, int a)
{
	cout << "func(double b,int a)" << endl;
}
int main()
{
	func(1020.0);
	func(20.010);
	
	return 0;
}

运行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值