C++入门基础(1)【命名空间、输入输出、缺省函数】

目录

C++是什么

C++历史背景 

C++关键字

命名空间 

                  命名空间定义以及namespace关键字 

命名空间一些性质

命名空间使用

C++的输入和输出 

缺省函数

​半缺省函数

全缺省函数 


C++是什么

       C++是一种面向对象的计算机程序设计语言,由美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普博士在20世纪80年代初期发明并实现,最初它被称作“C with Classes”(包含类的C语言)。它是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言,支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格.

       C++是C语言的继承,进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。

C++历史背景 

       1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。

        随着社会的发展,C++发展出了许多版本,如下图,其中C++98和C++11是目前用的比较多的版本。

 

 C++关键字

关键字不需要刻意去记,后面用的多了就熟能生巧了。

命名空间 

       我们知道在C中,同一个作用域里不能有两个相同的变量,局部变量、全局变量都是如此。C++之父为了解决这个问题,创建了命名空间这个概念。命名空间简单来说也是一个作用域,和局部、全局作用域相同,命名空间里也能定义变量、函数、类型,不过想要用它里面的内容需要特殊一些手段。

命名空间定义以及namespace关键字 

当我们想定义一个命名空间时,需要使用namespace关键字。

//namespace后加命名空间的名字,然后加一对{}即为命名空间
namespace xxx {
	//命名空间中可以定义类型、变量、函数
	typedef int datatype;
	int i;
	int add(int a, int b) {
		return a + b;
	}
}
命名空间一些性质

1.可嵌套

namespace xxxx {
	namespace xxx {
		//命名空间中可以定义类型、变量、函数
		typedef int datatype;
		int i;
		int add(int a, int b) {
			return a + b;
		}
	}
}

2.自动组合

namespace xxx {
	//命名空间中可以定义类型、变量、函数
	typedef int datatype;
	int i;
	int add(int a, int b) {
		return a + b;
	}
}
namespace xxx {
	double b;
}

当我们定义两个同名的命名空间时,它们会合二为一,上图的效果其实和下图一样

​
namespace xxx {
	//命名空间中可以定义类型、变量、函数
	typedef int datatype;
	int i;
	int add(int a, int b) {
		return a + b;
	}
    double b;
}

​
命名空间使用

在说命名空间的使用前想让大家思考一下下面程序

​namespace tmp {
	typedef int datatype;
	int scanf=1;
	int add(int a, int b) {
		return a + b;
	}
}
int main() {
	printf("%d\n",scanf);//1599934624
	printf("%p\n", scanf);//00007FF65F5D10A0
	return 0;
}

​

       为什么结果和我们想象的不一样呢?还记得我前面有说在使用命名空间里的内容是需要一些特殊手段吗 ?接下来介绍三种命名空间的使用方法

1.命名空间名+作用域限定符

作用域限定符::,当一个变量前加作用域限定符时若左边什么都没加,则默认是访问全局变量。如:printf("%d",::a);//打印全局变量a。

 命名空间名+作用域限定符,当作用域限定符前加命名空间名时,就是访问命名空间中的内容。

       知道了如何访问命名空间中的内容,可是新的问题出现了。 如果我要多次访问命名空间中的某个内容,难道每次都要加一个像tmp::的前缀?这样的话有点麻烦,于是下面这种方法能避免这种情况。

2.using namespace 命名空间名

        讲方法前先说明在一个程序中变量访问作用域的顺序:->局部域->全局域->命名空间域(如果有命名空间被展开)。使用using namesapce 命名空间名之后,所使用的命名空间就会被展开,这时变量的访问域就多了一个。那么上面的问题就可以这样解决。

但是这种方法也有弊端,若有一个全局变量和它同名则会有不明确的情况。

3.using namespace 命名空间名::变量名

    using namespace 命名空间名::变量名能够直接引入命名空间里的变量

C++的输入和输出 

C++输入使用cin,输出使用cout

//C++输入输出头文件
#include<iostream>
//std标准命名空间
using namespace std;
int main() {
	int num = 0;
    //输入格式,不需要数据类型格式
	cin >> num;
	//输出格式,不需要数据类型格式,endl为换行
	cout << num<<endl;
	printf("%d\n",num);
	return 0;
}

如果输出时有精度控制,推荐使用printf,cout想要控制精度相对比较麻烦 

缺省函数

缺省函数是当调用时,若没有传入参数,则参数会等于默认值,若有传入则等于传入值 

 半缺省函数

半缺省函数里有默认参数,有传入参数,默认参数的顺序需从后往前

全缺省函数 

函数中的参数全为默认参数

       最后,缺省参数的默认参数不能在声明和定义时同时出现,否则编译器无法确认该取何值。缺省值得是常量或全局变量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值