c++入门(命名空间 输入输出 参数缺省)

本文详述C++11标准下编程基础,涵盖命名空间管理、输入输出操作、缺省参数设置、函数重载机制、引用与指针区别、auto类型推导及nullptr空值应用,为初学者提供全面指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本片文章介绍c++(c++11标准)的一些入门知识包括

1.命名空间

2.C++输入&输出

3.缺省参数

4.函数重载

5.引用

6.auto关键字(C++11)

7.指针空值—nullptr(C++11)

**

1.命名空间

命名空间的定义和使用

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作 用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字 污染,namespace关键字的出现就是针对这种问题的。定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名 空间的成员。

普通命名空间的命名和使用,使用作用于限定符来对命名空间的变量使用
namespace N1  // N1为命名空间的名称 
{  
	int a;
	int Add(int left, int right)
	{
		return left + right;
	}
}

int main()
{
	printf("%d", N1::a);
	return 0;

}

此外命名空间还可以嵌套定义例如我再上述N1中嵌套定义一个N2

namespace N1  // N1为命名空间的名称 
{
	int a = 10;
	int Add(int left, int right)
	{
		return left + right;
	}
	namespace N2
	{
		int b = 20;
		int Sub(int x, int y)
		{
			return x - y;
		}
	}
}
int main()
{
	printf("%d", N1::a);
	printf("%d", N1::N2::b);
	system("pause");
	return 0;

}

在使用命名空间时还可以用using 将变量引入或用using namespace将命名空间引入来使用。

2.c++的输入输出

在c++中使用cin(标准输入)和cout(标准输出)语句进行输入输出,他们都包含在一个iostream头文件中,要使用还用有包含他们的标准命名空间std,输出运算符"<<“和输入运算符”>>"下面来看一个求两个数和的代码。

#include<iostream>
using namespace std;
int main()
{
	int a = 0;
	int b = 0;
	cin >> a >> b;
	cout << "a+b=" << a + b << endl;
	return 0;
}

3.参数缺省

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

#include<iostream>
using namespace std;
int Add(int x = 10, int y = 20)//全缺省参数
{
	return x + y;

};
int main()
{
	cout << Add() << endl;//参数缺省调用
	cout << Add(3, 5) << endl;?//不缺省参数调用
	return 0;
}

参数缺省还有一种方式半参数缺省

#include<iostream>
using namespace std;
int Sub(int a, int b = 5)//半参数缺省
{
	return a - b;
}
int main()
{
	cout << Sub(8) << endl;
	cout <<Sub(10, 5) << endl;
	system("pause");
	return 0;
}

在参数缺省时应注意

1.半缺省参数必须从右往左依次来给出,不能间隔着给
2.缺省参数不能在函数声明和定义中同时出现(这是防止便一起去无法识别出错)

4.函数重载

概念:在同一作用域中中声明几个功能类似的同名函数,这些同名函数的 形参列表(参数个数 或 类型 或 顺序)必须不同,这就称为重载函数(注意main函数不能重载)

//定义三组函数
Record lookup(const Account&);
Record lookup(const Phone&);
Record lookup(const Name&);
//这三组函数出参数类型外圈不相同,编译器会根据实参的类型确定用哪个函数,同时不允许定义出返回值类型外其他要素相同的函数。

为什么c++支持函数重载那?
编译器在运行程序时会有一个编译的过程,在这个过程中会将函数名和变量的名称进行改编。在c语言中重视将函数名加一个下划线如_Add,但由于C++要支持函数重载,命名空间等,使得其修饰规则比较复杂,不同编译器在底层的实现方式可能都有 差异。

int Add(int left, int right); 
double Add(double left, double right);

int main() 
{ 
	Add(1, 2);  
	Add(1.0, 2.0); 
	return 0;
}
//test.obj : error LNK2019: 无法解析的外部符号 "int __cdecl Add(int,int)" (?Add@@YAHHH@Z),该符号在函数 _main 中被引用
//test.obj : error LNK2019: 无法解析的外部符号 "double __cdecl Add(double,double)" (???Add@@YANNN@Z),该符号在函数 _main 中被引用
这是在编译时报的错误,我们可以看到编译器对函数根据参数类型不同有重新起名字。这就是c++支持函数重载的原因了

5.引用

概念:引用是为变量起了另外一个名字,引用类型引用另外一种类型,编译器不会为引用变量开辟内存空间,它和它 引用的变量共用同一块内存空间。
须知:引用必须初始化.在定义引用时,引用已经和他的初始值绑定在一起而不是拷贝给引用。这也导致引用一旦引用一个实体就不能再引用其他实体。但是一个实体可以有多个引用,
引用的定义:

int i=1024;
int &r=i;//r是一个int类型法人引用,
int &r=20;//错误引用的初始值必须是一个对象
double b=10;
int &r=b;//引用的数据类型必须相同

用引用做参数

void reset(int &i)
{
	i = 0;

}
int main()
{
	int j = 20;
	reset(j);
	cout << j << endl;
	system("pause");
}
//再调用函数reset时我们传的时引用这是形参i仅仅是j的有一个名字,此时改变i也就是改变j因此数出0

指针和引用的区别

引用在定义时必须初始化,指针没有要求 2. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型 实体 3. 没有NULL引用,但有NULL指针 4. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占 4个字节) 5. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小 6. 有多级指针,但是没有多级引用 7. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理 8. 引用比指针使用起来相对更安

6. auto关键字(C++11)

C++11中auto不再是一个存储类型指示符,而是作为一个新的类型 指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
注意:使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类 型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为 变量实际的类型。

7. 指针空值—nullptr(C++11)

C++11为什 么不在NULL的基础上进行扩展,这是因为NULL以前就是一个宏,而且不同的编译器厂商对于NULL的实现可 能不太相同,而且直接扩展NULL,可能会影响以前旧的程序。因此:为了避免混淆,C++11提供了 nullptr,即:nullptr代表一个指针空值常量。nullptr是有类型的,其类型为nullptr_t,仅仅可以被隐式转 化为指针类型,nullptr_t被定义在头文件中。
注意:
1.在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的。
2. 在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。
3. 为了提高代码的健壮性,在后续表示指针空值时建议好使用nullptr。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值