您现在的位置是:首页 >学无止境 >[C++]——入门【上】网站首页学无止境
[C++]——入门【上】
?个人主页:_麦麦_
?今日名言:一些看似不起眼的点滴努力,会在日后开花结果,会在某一刻,突然让你看到坚持的意义。愿你活成一颗种子,静默积蓄力量,有朝一日破土而出,惊艳时光。——《人民日报》
目录
一、前文
本篇文章将会带大家走入C++的世界,我们见识到其与C语言的一些不同之处,诸如命名空间、缺省参数等等,话不多说,就让我们开始C++入门的学习之旅叭!
二、正文
1.命名空间
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。为了应对这种情况,C++就引入了命名空间,也就是“namespace”这一关键字。
下面就以生成随机数的rand函数为例,如果我们在包含<stdlid.h>这个头文件之后,还对变量起名为rand,这时候就会出现命名冲突的问题,导致程序不能正常运行。
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
printf("%d
", rand);
return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”
1.1 命名空间定义
那么在知道了命名空间的来源,要如何使用命名空间呢?
在使用它之前,我们先需要定义一个命名空间,就相当于圈了一块地。定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名 空间的成员。
注:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
演示代码如下:
//1.正常的命名空间定义
namespace my_space
{
//命名空间可以定义变量/函数/类型
int name=linsu;
int Add(int left,int right)
{
return left+right;
}
struct Node
{
struct Node* Next;
int val;
}
}
//2.命名空间可以支持嵌套
//text.cpp
namespace N1
{
int a=5;
int Add(int left,int right)
{
return left+right;
}
namespace N2
{
int a=7;
}
}
//3.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
//ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个
// test.h
namespace N1
{
int b=8;
}
2.2命名空间使用
在定义完命名空间之后,我们就可以使用我们的命名空间了
命名空间的使用有三种方式:①直接展开②展开某个③指定访问
既然有三种方式供我们使用,那么我们该如何选择呢?一般来说,当我们在项目中书写代码的时候,通常使用的是“指定访问”的方式,虽然使用起来麻烦,但是却能够避免将命名空间直接展开后与库重名的风险。不过,日常练习的时候大可不必如此严谨,我们可以采用直接展开和展开某个的方式,后者往往用于使用频率较高,即展开常用的。
演示代码如下:
namespace N1
{
int a=0;
int b=6;
namespace N2
{
int a = 5;
int b = 7;
}
}
//指定访问
int main()
{
printf("a=%d
", N1::a);
printf("a=%d
", N1::N2::a);
return 0;
}
//展开全部
using namespace N1;
int main()
{
printf("a=%d
", a);
return 0;
}
//展开某个
using N1::N2::a;
int main()
{
printf("a=%d
", a);
return 0;
}
3.输入&&输出
相信熟悉C语言的小伙伴们,对“scanf”和“printf”这两个输出、输入函数的使用一定是轻车熟路了吧。不过有时当我们想要输入或输出多组不同类型的数据时就需要重复书写正链各个函数,代码看起来就显得十分冗长了,那么有什么好的解决方案呢?于是C++相比于C有了新的输入和输出。
3.1演示代码
//输入与输出
#include <iostream>
using namespace std;
int main()
{
//输入
int a = 0;
double b;
char c;
cin >> a;
cin >> b >> c;
//输出
cout << "Welcome to my blog!!!"<<666<<endl;
cout <<a<<b<<c<<endl;
cout << endl;
return 0;
}
3.2使用说明
1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。
3.<<是流插入运算符, >>是流提取运算符。
4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型。
注:实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,这些知识在后续的文章才会介绍,所以我们这里只是简单学习他们的使用。
4.缺省参数
4.1概念
缺省参数,又称默认参数,是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
不过在C语言中,如果一个函数有参数的话,如果我们在使用它的时候没有传递任何参数,或者没有传全,那么此时编译器是肯定会报错的。而在C++中则不会出现这样的情况,可以根据我们的实际需求来传递参数。
//缺省参数
#include <iostream>
using namespace std;
int Add(int num1 = 500, int num2 = 20)
{
return num1 + num2;
}
int main()
{
cout << Add() << endl; //没有传参时,使用参数的默认值
cout << Add(200,50) << endl; //传参时,使用指定的实参
return 0;
}
4.2缺省参数分类
既然我们能够对参数进行默认值的设置,那么依据参数设置的个数就延伸出了不同类型的缺省参数
缺省参数共分为两种:全缺省参数和半缺省参数。对于全缺省参数来言,我们对函数的每一个参数都进行了默认值的设置。而半缺省参数并不是只对一半的参数进行默认值的设定,只要至少有一个值未进行默认值的设置,就属于半缺省参数。
不过要注意的是:
①半缺省参数必须从右往左依次来给出(传参的时候是从左往右传的),且不能跳着传默认参数。
②缺省参数不能在函数声明和定义中同时出现,当函数的声明和定义在不同的文件时,一般般对函数的声明进行缺省参数
③缺省值必须是常量或者全局变量
④C语言不支持(编译器不支持)
//全缺省参数
void Func(int a=10,int b=20,inc=30)
{
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
}
int main()
{
Func();
Func(1);
Func(1,2);
Func(1,2,3);
return 0;
}
//半缺省参数
void Func(int a,int b=20,int c=30)
{
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
}
int main()
{
Func(1);
Func(1,2);
Func(1,2,3);
return 0;
}
5. 函数重载
自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。
比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前 者是“谁也赢不了!”,后者是“谁也赢不了!”
5.1函数重载概念
那么将重载引用函数,就形成了函数重载。
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。而这种功能恰是C语言没有的,虽然函数功能类似,但是你需要给其命名不同的名字。
5.2函数重载演示代码
#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(double left, double right)" << endl;
return left + right;
}
//参数个数不同
void fun()
{
cout << "fun()" << endl;
}
void fun(int a)
{
cout << "fun(int a)" << endl;
}
//参数类型顺序性不同
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;
}
int main()
{
Add(5, 20);
Add(5.0, 20.0);
fun();
fun(6);
f(10, 'a');
f('a', 10);
return 0;
}
三、结语
到此为止,关于C++入门(上)的讲解就告一段落了,而剩余的内容也会在下面的文章中继续讲解,敬请期待呀!
关注我 _麦麦_分享更多干货:_麦麦_的博客_CSDN博客-领域博主
大家的「关注❤️ + 点赞? + 收藏⭐」就是我创作的最大动力!谢谢大家的支持,我们下期见!