一. 本篇要学习的内容和知识结构概览

二. 知识点逐条分析

1. 使用函数重载

C++允许为同一个函数定义几个版本, 从而使一个函数名具有多种功能, 这称之为函数重载.

像这样: 虽然函数名一样, 但是参数列表不一样, 一个求两个整型参数的最大值, 一个求三个整型参数的最大值.

2. 新的基本数据类型及其注意事项

a. void是无类型标识符, 只能声明函数的返回值类型, 不能声明变量

b. C++当中有bool类型, 而C中没有

c. C++的常量分为符号常量, 浮点常量, 整数常量

像这样:

我们可以通过屏幕输出来查看011, 11, 0x11各代表十进制的多少

3. 动态分配内存

申请内存空间: new 类型名[size], 申请可以存size个该数据类型对象的存储空间

释放内存空间: delete 指针名;

像这样:

4. 引用

为现有对象起个别名, 别名代表的内存空间与引用对象的内存空间是一样的

引用的声明方式: 数据类型(类型名) & 别名 = 对象名;

&的位置无关紧要

像这样:

我们再进一步的使用它

可以看到, 上下两组输出结果是一样的, 也就是说引用b, 和变量a都是代表的同一块内存地址

所以更改b的值, a的值也会变

注意: 引用, 就是给一块已经存在的内存添加一个新的标识符, 所以使用引用没有分配新的内存空间, 所以可以通过引用来修改原来的对象, 但是不能有空引用, 它必须和一声正确的存储区域关联。

像这样: 是错误的

int & b;// 编译器提示信息: Declaration of reference variable 'b' requires an initializer, 变量b需要一个初始化器

引用的作用

a. 引用用于函数的参数表, 不产生临时对象, 提高安全性和执行效率

b. 引用用于函数返回值 用到的时候很少, 因为不安全, 你可能问访问到一个已经被释放的对象

引用可以这么使用

但是不能这么使用

指针和引用的区别和联系

联系: 它们都会对内存地址上存在的变量进行修改, 但引用不占用新的地址, 节省开销

区别: 指针是低级的直接操作内存地址的机制, 可由整型数强制类型转换得到, 功能强大, 但是容易出错, 引用是较高级的封装了指针的特性, 不直接操作内存地址, 不可强制类型转换得到, 安全性高.

5. 对指针使用const限定符

a. 指向常量的指针

int a = 5;

int b = 8;

const int * p = &a; // 指向常量的指针, 也就是"*p="不成立, 也就是不能通过指针p修改指向的内存地址中的值, 但是p的值可以更改

*p = 10; // 错误

p = &b; // 正确

b. 常量指针

int a = 5;

int b = 8;

int * const p = &a; // 常量指针, 也就是"p="不成立, 也就是p的值不能更改, 但是是它所指向的内存地址中的值可以修改

*p = 10; // 正确

p = &b; // 错误

c. 指向常量的常量指针

int a = 5;

int b = 8;

const int * const p = &a; // 指向常量的的常量指针, 既不可以通过p修改它所指向的内存地址中的值, 也不可更改p的值

*p = 10; // 错误

p = &b; // 错误

6. 泛型算法应用于普通数组

// 定义数组
int a[] = {, , , , };
int b[] = {}; // 数组反转
// reverse(a, a + 5); // 升幂排序
// sort(a, a + 5); // 降幂排序
// sort (a, a+5, greater<int>()); // 复制数组内容
// copy(a, a + 5, b); // 逆向复制数组a中的内容到数组b
// reverse_copy(a, a + 5, b); // 检索
// int * p = find(a, a + 5, 5);
// cout << p << endl;
// cout << a + 5 << endl;
// if (p == a + 5) {
// cout << "没有值为5的数组元素" << endl;
// } else {
// cout << "有值为5的数组元素" << endl;
// } // 正向输出
copy(a, a + , ostream_iterator<int>(cout, "数字 ")); cout << endl; // 逆向输出
reverse_copy(a, a + , ostream_iterator<int>(cout, "数字 ")); for (int i = ; i < ; i++) {
cout << a[i] << " ";
} cout << endl; for (int i = ; i < ; i++) {
cout << b[i] << " ";
} cout << endl;

7. 程序的编辑, 编译, 连接, 运行的基本概念

使用编辑器编辑一个C++源程序, 也就是源文件,  扩展名为.cpp, 像这样: Hello.cpp;

使用C++编译器对这个源程序进行编译, 产生目标文件, 扩展名为.obj, 像这样: Hello.obj;

使用连接程序, 将目标文件与系统库连接, 产生可执行文件, 扩展名为.exe, 你这样: Hello.exe

任何时候我们都不要忘记语言只是我们解决问题的工具, 思想才是我们解决问题的本质, 技术不深, 我们可以去查, 去练习, 而思想只有慢慢的去陪养, 去思考, 去总结!


自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!

C语言C++编程学习交流圈子,【点击进入微信公众号:C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

C/C++编程笔记:C++入门知识丨认识C++面向过程编程的特点的更多相关文章

  1. C/C++编程笔记:C++入门知识丨从结构到类的演变

    先来看看本节知识的结构图吧! 接下来我们就逐步来看一下所有的知识点: 结构的演化 C++中的类是从结构演变而来的, 所以我们可以称C++为”带类的C”. 结构发生质的演变 C++结构中可以定义函数, ...

  2. C/C++编程笔记:C++入门知识丨运算符重载

    本篇要学习的内容和知识结构概览 运算符重载使用场景 常规赋值操作 我们现在有一个类 想要实现这种赋值操作 具体实现如下: 所以说呢,我们在使用运算符进行运算的时候, 实际上也是通过函数来实现运算的. ...

  3. C/C++编程笔记:C++入门知识丨多态性和虚函数

    本篇要学习的内容和知识结构概览 多态性 编译时的多态性称为静态联编. 当调用重载函数时, 在编译期就确定下来调用哪个函数. 运行时的多态性称为动态联编. 在运行时才能确定调用哪个函数, 由虚函数来支持 ...

  4. C/C++编程笔记:C++入门知识丨继承和派生

    本篇要学习的内容和知识结构概览 继承和派生的概念 派生 通过特殊化已有的类来建立新类的过程, 叫做”类的派生”, 原有的类叫做”基类”, 新建立的类叫做”派生类”. 从类的成员角度看, 派生类自动地将 ...

  5. C/C++编程笔记:C++入门知识丨类和对象

    本篇要学习的内容和知识结构概览 类及其实例化 类的定义 将一组对象的共同特征抽象出来, 从而形成类的概念. 类包括数据成员和成员函数, 不能在类的声明中对数据成员进行初始化 声明类 形式为: clas ...

  6. C/C++编程笔记:C++入门知识丨函数和函数模板

    本篇要学习的内容和知识结构概览 函数的参数及其传递方式 1. 函数参数传递方式 传值: 传变量值: 将实参内存中的内容拷贝一份给形参, 两者是不同的两块内存 传地址值: 将实参所对应的内存空间的地址值 ...

  7. C/C++编程笔记:C++入门知识丨认识C++的函数和对象

    一. 本篇要学习的内容和知识结构概览 二. 知识点逐条分析 1. 混合型语言 C++源文件的文件扩展名为.cpp, 也就是c plus plus的简写, 在该文件里有且只能有一个名为main的主函数, ...

  8. UnityShader学习笔记1 — — 入门知识整理

    注:资料整理自<Unity Shader入门精要>一书 一.渲染流程概念阶段:  应用阶段:(1)准备好场景数据:(如摄像机位置,物体以及光源等)   (2)粗粒度剔除(Culling): ...

  9. AngularJs学习笔记1——入门知识

    1.什么是AngularJs          AngularJs 诞生于2009年,由Misko Hevery 等人创建,后被Google收购,是一个优秀的Js框架,用于SPA(single pag ...

随机推荐

  1. vue 3.0 体验,vue 3.0新特性

    前言 昨天不是尤雨溪 不是刚在B站 直播玩了,分享了vue-next v3.0.0-beta.1 版本 哈哈, 不要太刺激哦 6大亮点 Performance:性能更比Vue 2.0强. Tree s ...

  2. Jmeter系列(33)- 跨平台运行 Jmeter,CSV 文件路径如何设置?

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 抛出问题 上一篇文章中详细讲解了 CS ...

  3. day11总结

    """1.什么是函数 具备某一功能的工具===>函数 事先准备工具的过程===>函数的定义 遇到应用场景拿来就用=>函数的调用 2.为何要有函数 内置函 ...

  4. flask 源码专题(七):threading.local和高级

    1.python之threading.local 当每个线程在执行 val.num=1 ,在内部会为此线程开辟一个空间,来存储 num=1 val.num,找到此线程自己的内存地址去取自己存储 num ...

  5. HotSpot VM运行时

    HotSpot VM运行时系统为HotSpot JIT编译器和垃圾收集器提供服务和通用API,同时还为VM提供启动.线程管理.JNI(Java本地接口)等基本功能.HotSpot VM运行时环境担当许 ...

  6. python小游戏-水文

    脚本不会,全都白费.所以就去学习了简单的python,结果不慎学了python中的pygame,浪费了不少时间,没啥用如果不做游戏个人觉得最好别学,学爬虫她不香吗?不过也有一点收获,打飞机小游戏,源码 ...

  7. ATX 学习 (四)-atxserver2

    ATXSERVER2 一.main()文件启动 1.首先通过parse_args返回一个Namespace作一些配置,登录页html在SimpleLoginHandler这个里边写着,2.接着通过db ...

  8. 将终结点图添加到你的ASP.NET Core应用程序中

    在本文中,我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由.上面文章我向您演示了如何生成一个有向图(如我上篇文章中所示),可以使用Gra ...

  9. 【Nginx】图片显示过慢,文件下载不完全,竟然是Nginx的锅!!

    写在前面 最近,一名读者跟我说他通过浏览器访问自己的服务器时,图片显示的非常慢,以至于在浏览器中都无法完全加载出来,下载文件时,更是恼火,文件根本就无法完全下载下来.而且奇怪的是这位读者所在的网络是没 ...

  10. 坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA?

    一般步骤:登陆后点邮箱名——安全设置——开通两步验证,用二次验证码微信小程序绑定即可 具体步骤见链接  坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA? 二次验证码小程序于谷歌身份验证 ...