目录

<初识C++>《C++》之学习

——By 作者:新晓·故知

1. C++关键字(C++98)

2. 命名空间

2.1 命名空间定义

2.2 命名空间使用

3. C++输入&输出

4. 缺省参数

4.1 缺省参数概念

4.2 缺省参数分类

5. 函数重载

5.1 函数重载概念

后记:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

——By 作者:新晓·故知


<初识C++(1)>《C++初阶》

——By 作者:新晓·故知

“追风赶月莫停留,平芜尽处是春山”。

(此图链接:4.函数缺省讲解)  (附注:此图狠狠共情了......)

1. C++关键字(C++98)

C++总计63个关键字,C语言32个关键字

2. 命名空间

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

举例1:

在C语言编译器下:

解析:

在C语言中,rand是一个库函数,但C语言中的变量命名规则没有规定要和库名区别,因此再次包含头文件“#include<stdlib.h>”展开后会出错。

在C语言中发生命名冲突,而在C++中引入namespace解决了这个问题:

rand被隔离在命名空间,不会发生命名冲突!(rand是一个库函数,函数名是地址)

命名冲突发生在同一个域里面,因此同一个域不能有同名变量。

举例2:

若同时打印全局变量,局部变量 ,局部优先打印:

若使用全局变量,需要加上作用域限定符“::” 

 在C++中,使用“::”进行访问:

举例3:

命名空间里可以定义变量、函数、类型。

举例4:

类型名Node相同,合并后会冲突!

 解决:

这里类型Node两个同名,引起命名冲突!

如果合并后仍有命名冲突,那可以再次嵌套,按照访问顺序进行访问使用!

 注:

命名空间只能定义在全局!不能定义在main函数内!

但是展开命名空间不能随便使用!

命名空间全部释放:

命名空间指定部分释放:

 注:

全部展开有冲突风险:

解决1:指定命名空间(繁琐)

解决2:释放指定部分常用的:

2.1 命名空间定义

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

//1. 普通的命名空间
namespace N1 // N1为命名空间的名称
{// 命名空间中的内容,既可以定义变量,也可以定义函数int a;int Add(int left, int right){return left + right;}
}
//2. 命名空间可以嵌套
namespace N2
{int a;int b;int Add(int left, int right){return left + right;}namespace N3{int c;int d;int Sub(int left, int right){return left - right;}}
}
//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
namespace N1
{int Mul(int left, int right){return left * right;}
}

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

2.2 命名空间使用

命名空间中成员该如何使用呢?比如:

namespace N
{int a = 10;int b = 20;int Add(int left, int right){return left + right;}int Sub(int left, int right){return left - right;}
}
int main()
{printf("%d\n", a); // 该语句编译出错,无法识别areturn 0;
}
命名空间的使用有三种方式:
1.加命名空间名称及作用域限定符

int main()
{printf("%d\n", N::a);return 0;
}

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

using N::b;
int main()
{printf("%d\n", N::a);printf("%d\n", b);return 0;
}

3.使用using namespace 命名空间名称引入

using namespce N;
int main()
{printf("%d\n", N::a);printf("%d\n", b);Add(10, 20);return 0;
}

3. C++输入&输出

说明:
1. 使用cout标准输出(控制台)cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。
注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用 <iostream>+std的方式。
2. 使用C++输入输出更方便,不需增加数据格式控制,比如:整形--%d,字符--%c

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

可以连续输入输出多个!

4. 缺省参数

附注:

祝福天下人有情人终成眷属!

(其实,作者连备胎都没有资格,此图狠狠共情了......   长叹吾生之余,亦诚挚祝福各位!)

4.1 缺省参数概念

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

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

4.2 缺省参数分类

全缺省参数(全部都给了缺省参数)

void TestFunc(int a = 10, int b = 20, int c = 30)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}
半缺省参数

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

 

注意:
1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现
3. 缺省值必须是常量或者全局变量
4. C语言不支持(编译器不支持)

//a.h
void TestFunc(int a = 10);
// a.c
void TestFunc(int a = 20)
{}
// 注意:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那
个缺省值。

#include <iostream>
using namespace std;
void TestFunc(int a = 10, int b = 20, int c = 30)
{cout << "a= " << a << endl;cout << "b= " << b << endl;cout << "c= " << c << endl << endl;
}
int main()
{TestFunc();TestFunc(1);TestFunc(1,2);TestFunc(1,2,3);return 0;
}

从右往左指的是给缺省参数,因为传参是从左往右传,所以缺省必须是从右往左缺省!(缺省参数是声明或定义函数时为函数的参数指定一个默认值。)

半缺省的意义举例:

#include <iostream>
#include<cassert>
using namespace std;//半缺省的意义举例
struct Stack
{int* a;int size;int capacity;
};
void StackInit(struct Stack* ps, int n = 4)
{assert(ps);ps->a = (int*)malloc(sizeof(int) * n);ps->size = 0;ps->capacity = n;
}int main()
{Stack st;//不赋值,就默认开辟4个空间StackInit(&st);//根据需要赋值开辟指定空间StackInit(&st,100);return 0;
}

注:

1.不允许同时在函数声明、函数定义处赋值,防止不同赋值歧义

2.允许在函数声明处赋值,在函数定义处不赋值

3.不允许在函数声明处不赋值,在函数定义处赋值,因为与编译、链接有关,预处理首先是函数的声明

5. 函数重载

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。
比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!”

5.1 函数重载概念

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

 

在C语言中,若交换int、double型的数,需要定义两个不同的交换函数。但C++支持,就方便很多!

后记:
●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

——By 作者:新晓·故知

<初识C++(1)>《C++初阶》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. Spring Boot 应用迁移到 Java 11
  2. JavaScript是如何同时做到单线程和异步执行的
  3. php json error,PHP 7.3 中的 JSON 错误处理
  4. Oracle SQL优化原则
  5. 网页设计中常用的Web安全字体
  6. Autodesk 3DSMax 2014 安装注册说明
  7. Lzrs序數幻方集(32階七色彩虹)
  8. ubuntu18.04配置deepo深度学习环境(cuda + cudnn + nvidia-docker + deepo)--超级细致,并把遇到的错误和所有解决方案都列出来了
  9. vue开发微信公众号订阅消息踩坑记录
  10. 微型计算机pcu,浅谈丰田紧凑型HV动力控制单元(下)
  11. 金额的每三位一个逗号的正则解法
  12. 使用PHP提取视频网站页面中的FLASH地址
  13. 数据中心服务器机柜电气参数,数据中心服务器机柜一些安装与参数
  14. 虚拟内存与物理内存之间的关系
  15. android系统文件误删,Android系统建个回收站帮你找回误删文件
  16. 榨汁机、酸奶机、绞肉机、面条机。。。谁在坑你的钱?
  17. 清风数学建模学习笔记——K-means聚类模型详解及SPSS操作流程
  18. html5给页面添加树叶特效,html5 canvas树叶光标动画特效
  19. 电子邮件系统哪个好?
  20. 【Java】获取星座匹配度

热门文章

  1. 生产管理系统的功能模块
  2. 川崎机器人运动命令个人笔记
  3. 【web系列十四】Jsplumb画布使用方法
  4. flutterpiechart_Flutter饼状图
  5. 机器学习知识总结 —— 12. 机器与深度学习中常用术语 [R-Y]
  6. Flutter flutter doctor --android-licenses的报错
  7. 计算机 ip 地址分为那几类,什么是IP地址?由哪几部分构成?IP地址分为几类?
  8. java毕业设计大学生能力测评系统mybatis+源码+调试部署+系统+数据库+lw
  9. windows修改ntp同步时间间隔
  10. 批量移动指定文件至指定文件夹