C++入门(一)

本文介绍了C++中的命名空间用于解决标识符冲突,如何定义和使用命名空间,以及C++的输入输出机制(包括iostream库和cout/cin)。此外,还讲解了缺省参数的概念和分类,以及函数重载的原理和示例。
摘要由CSDN通过智能技术生成

 目录

 C++关键字

命名空间 

命名空间的定义

命名空间的使用

C++输入与输出

缺省参数

缺省参数分类

函数重载

函数重载的原理


 C++关键字

C++在C语言的基础上新增了31个关键字

命名空间 

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

命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。在命名空间中可以定义变量,函数,结构体。

命名空间还可以嵌套定义

如果定义了两个相同名称的命名空间,编译器最后会合成同一个命名空间。

命名空间的使用

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

作用域限定符即::

cout<<A::a;

2.使用using将命名空间中某个成员引入

3.使用using将命名空间中的成员引入

C++输入与输出

在C语言中有标准输入输出函数scanf和printf,而在C++中有cin标准输入cout标准输出。在C语言中使用scanf和printf函数,需要包含头文件stdio.h。在C++中使用cin和cout,需要包含头文件iostream以及std标准命名空间

#include<iostream>
using namespace std;
int main()
{
 cout<<"Hello world"<<endl;
 return 0;
}
  • 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件 以及按命名空间使用方法使用std。
  • cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。
  •  >是流提取运算符。
  • 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。 C++的输入输出可以自动识别变量类型。
  • 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识, 这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。后面我们还有有 一个章节更深入的学习IO流用法及原理。
//cin是输入,>>可以理解为从cin流向a,cin自动识别变量的类型
cin>>a;
//cout是输出,<<可以理解为从a流向输出流
cout<<a<<endl;

缺省参数

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

void Func(int a = 0)
{
 cout<<a<<endl;
}
int main()
{
 Func();     // 没有传参时,使用参数的默认值0
 Func(10);   // 传参时,使用指定的实参10
return 0;
}

缺省参数分类

全缺省参数

void Func(int a = 10, int b = 20, int c = 30)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }

半缺省参数

void Func(int a, int b = 10, int c = 20)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }

注意

  • 半缺省参数必须从右往左依次来给出,不能间隔着给
  • 如果要函数声明和定义分离,缺省参数不能在函数声明和定义中同时出现,应出现在声明中
  • 缺省值必须是常量或者全局变量

函数重载

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

// 1、参数类型不同
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(double left, double right)" << endl;
	return left + right;
}
// 2、参数个数不同
void f()
{
	cout << "f()" << endl;
}
void f(int a)

{
	cout << "f(int a)" << endl;
}
// 3、参数类型顺序不同
void f(int a, char b)
{
	cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
	cout << "f(char b, int a)" << endl;
}

注意:若仅仅只有返回值不同,其他相同,则不能构成函数重载。

函数重载的原理

为什么C++支持函数重载,而C语言不支持函数重载呢?

在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。

C++在编译器编译后

函数名字修饰之后变为

?函数名 @@YA 返回值 参数类型 参数类型

而C在编译后,却使用函数的名称,因此无法进行函数重载


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值