C++ Primer Plus 第一,二章笔记

news2024/9/30 1:29:51

目录

第一章笔记

1、C++简介

2、C++简史

3、可移植性和标准

第二章笔记

1. 进入C++

1.3、预处理器和头文件

1.4、名称空间(namespace)

1.5、使用cout进行C++的输出

2. C++语句

3. 其他C++语句

4. 函数

第一章笔记

1、C++简介

C++融合了3种不同的编程方式:

  • C语言代表的过程性语言
  • C++在C语言基础上添加了类代表的面向对象语言
  • C++模板支持的泛型编程

C++继承C语言高效、简洁、快速和可移植性的传统。

2、C++简史

2.1 C语言编程:过程性语言

        数据:程序使用和处理的信息。

        算法:程序使用的方法。

        C语言是 过程性语言 ,强调编程的算法方面。一种结构化的编程方式。

        C语言的新原则:自顶向下设计,理想:将大型程序拆分小型、便于管理的任务。

2.2 面向对象编程

        过程性语言(C语言)强调算法,OOP(C++,Java等)强调数据

        OOP不像过程性编程,其理念是设计与问题的本质特性相对应的数据格式。区别如下:        

    过程性语言(让问题来满足语言)

               OOP编程(让语言来满足问题)

        在C++中,类是一种规范,描述了新型数据格式,对象则根据类规范构造的特定数据结构

类规定了可使用哪些数据来表示对象以及可以对这些数据执行哪些操作

OOP程序设计方法:先设计类(可以明确表示程序要处理的东西),然后设计使用类的对象的程序

        OOP可以创建可重用的代码,减少大量的工作,信息隐藏可以保护数据,使其免遭不适当的访问。

2.3 C++和泛型编程

泛型编程(generic programming)是C++支持的另一种编程模式。与OOP目标系统。

术语:泛型(指创建独立于类型的代码)

OOP与泛型编程的区别:

  • OOP强调编程的数据方面,是管理大型项目的工具
  • 泛型编程强调独立于特定数据类型,提供执行常见任务(如对数据排序或合并链表)的工具。

        C++泛型编程需要对语言进行扩展,以便于可以只编写一个泛型(即不是特定类型的)函数,并将其用于各种实际类型

3、可移植性和标准

C++是C语言的超集,任何有效的C程序都是有效的C++程序。

3.1 可移植性的两个障碍

  • 硬件:分块放置模块,通过重写模块,最大限度降低可移植性问题。
  • 语言上的差异性:国际组织定义了C语言标准、定义了C++99、C++11、C++14等标准。

3.2 C++的二重性

  • OOP提供了高级抽象
  • C提供了低级硬件访问

C++既可以通过OOP进行抽象,也可完成类似C一样的对硬件访问的操作。

第二章笔记

1. 进入C++

对于一个C++ 程序主要包含以下元素:

  • 注释:由前缀// 或者是 /* */ 标识
  • 预处理器编译指令#include
  • 函数头:int main()
  • 编译指令:using namespace
  • 函数体:用{ } 括起来
  • 使用C++ 的cout工具显示消息的语句
  • 结束main()函数的return语句

1.1、main()函数头

main() 被启动代码调用,而启动代码是编译器添加到程序中。

函数头描述 main() 和OS(UNIX/Linux、Windows、mac os等)直接的接口

空括号的main() 不接受任何参数。

int main(void)
{
    statement
    return 0;
}

main()函数描述了函数的行为。同时也构成了两部分的 函数定义(function definition) :第一行int main()函数叫做 函数头(function heading),花括号({和})中包括的部分叫 函数体

函数体:指出函数应做什么的计算机指令。

在C++中,每条完整的指令叫做语句。所有的语句都是以 分号结束。

 

main()中最后一条语句叫做  返回语句(return statement),结束main()函数。

注意:C++程序通常是以main() 函数开始执行,如果没有,程序不完整,则编译器会指出未定义main()函数

大小写都必须准确

不需要main()函数的特殊情况:

  1. Windows中的动态链接(DLL)模块。
  2. 单片机或机器人芯片

1.2、C++注释

C++中的注释以 双斜杠(//) 打头。以行尾作为结束。

注释的作用:为程序提供解释说明,使得程序通俗易懂。

通常标识程序的一部分或者是标识代码的某个方面。

注意点:编译器不会运行,会直接忽略注释。

C++也可以识别C语言的注释

C语言风格的注释

  • 多行注释:符号/* 和 */ 之间,以 */ 作为注释的结束。
  • 单行注释:以 双斜杠(//) 开始,行尾作为结束。

1.3、预处理器和头文件

如果程序要使用C++输入或输出工具时,必须使用两行代码:

#include <iostream>
using namespace std;

使用了 #include作为了预编译指令,也就是所谓的预处理器指令。

预处理器的操作:在源代码被编译之前,替换或添加文本。

例如:

#include <iostream>

像iostream这样的文件叫做 包含文件(include file) ———— 也被包含在其他的文件中,所以也叫做 **头文件(header file) **。

头文件命名约定

头文件类型约定示例说明
C++旧式风格以 .h 结尾iostream.hC++程序可以使用
C旧式风格以 .h 结尾math.hC、C++ 程序可以使用
C++ 新式风格没有扩展名iostreamC++程序可以使用,使用namespace std;
转换后的C加上前缀c,没有扩展名cmathC++ 程序可以使用,可以使用不是C的特性,如namespace std;

1.4、名称空间(namespace)

如果程序中使用的是 iostream ,那么就需要使用名称空间编译指令来使得对程序可用。

using namespace std;

也叫做 using编译指令

1.5、使用cout进行C++的输出

    cout<<"Come up an C++"<<endl;
    cout<<"You won't regret it"<<endl;

双引号 括起来的部分就是要打印的消息。

在C++中,使用双引号括起来的一系列字符叫做 字符串,由于若干个字符组合而成。

<< 指出信息流动的路径,cout是一个预定义的对象

控制符endl

cout<<endl;

endl 是C++中的一个特殊符号,作用:重起一行

在输出流中插入endl使得屏幕光标移到下一行开头。

endl在头文件iostream中定义,且位于名称空间std中。

1.6、C++源代码风格

C++中源代码的风格遵循以下规则:

  • 每条语句各占一行。
  • 每个函数都有一个开始花括号和一个结束花括号,两个花括号各占一行。
  • 函数中的语句都相对于花括号进行缩进。
  • 与函数名称相关的圆括号周围没有空白

2. C++语句

2.1 声明语句和变量

在C++中,首次使用变量时,必须声明 。可以避免因拼写错误而难以发现错误。

声明通常指出要存储的数据类型和程序对存储在内存里的数据使用的名称。

程序中的声明语句叫作定义声明语句,简称定义。定义会使得编译器为变量分配内存

注意:声明不一定是定义。

2.2 赋值语句

赋值语句将值赋给存储单元。

符号“ =”叫作赋值运算符

赋值是从右向左进行。

3. 其他C++语句

3.1 cin 和cout

cin 使用 >> 运算符从输入流中抽取字符。

可以将通过键盘输入的一列字符(即输入)转换为接收信息的变量能够接受的形式。

cout 的对象属性包含一个插入运算符 << ,将右侧的信息插入到输出流中。

<< 运算符可以进行多条输出语句的拼接。

3.2 类的简介

类是C++ 面向对象编程(OOP)的核心概念之一。

什么是类?

类是用户定义的一种数据类型。

要定义类,需要描述它能够表示什么信息可对数据执行什么操作

类定义描述的是:数据格式及其用法,而对象则是根据数据格式规范创建的实体

两个类cin类 和 cout类

  • cin类:istream类对象
  • cout类:ostream类对象ostream类定义描述了ostream对象表示的数据以及对它执行的操作

两个类没有被内置到编译器中。 注意点描述了一种数据类型的全部属性(包括使用它执行的操作)对象则是根据描述创建的实体

C++中信息发送的方式

  • 使用类方法(函数调用等)
  • 重新定义运算符

4. 函数

两种C++函数

  • 有返回值
  • 无返回值

4.1 有返回值的函数

有返回值的函数将生成一个值,而值将赋值给变量或其他的表达式中使用。

  • 被调用函数:被调用的函数
  • 调用函数:包含调用的函数
  • 返回值:发送回的值

参数 是发送给函数的信息, 返回值 是从函数中发送回去的值。

注意:C++程序应当为程序中使用的每个函数提供原型,对于C++编译器而言,函数的参数类型返回值类型必须一致 。

4.2 函数变体

  • 在原型中使用关键字void来指定返回类型,指出函数没有返回值。
    void bucks(double);
  • 关键字void不接受任何参数。如果省略void,让括号为空,则C++解释为一个不接受任何参数的隐式声明。
    int rand(void);

4.3 用户定义的函数

对于库函数,在使用之前必须提供其原型,通常把原型放在main()定义之前。

  • 函数格式 函数格式为:一个函数头 + 花括号的函数体
    type functionname(arguementlist)
    {
        statements
    }

    C++ 不允许将函数定义嵌套在另一个函数中,每个函数定义独立。

  • 函数头 例如main()函数头。

注意:关键字是专用词,不能用作他用。

4.4 用户定义的有返回值的函数

有返回值的函数,使用关键字return来提供返回值,并结束函数。

函数的特性

  • 有函数头和函数体
  • 接受一个参数
  • 返回一个值
  • 需要一个原型

4.5 在多函数程序中使用using编译指令

让程序访问名称空间std的4种方法

  • 将 using namespace std; 放在函数定义之前,让文件种所有的函数都能够使用名称空间std中所有的元素。
  • 将 using namespace std; 放在特定的函数定义之前,让该函数能够使用名称空间std中的所有元素。
  • 在特定的函数中使用类似 using std::cout;编译命令,而不是 using namespace std; 让该函数能使用指定的元素,如cout。
  • 完全不使用编译指令using,而在需要使用名称空间std中的元素是,使用前缀std::

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vsdx文件怎么打开,安装什么软件打开这种后缀名(教程)

目录 简介 安装配置 其他 总结 简介 VSDX 文件是 Microsoft Visio 文件格式&#xff0c;它是一种二进制文件&#xff0c;用于保存 Visio 中的绘图和图表。如果你想要打开 VSDX 文件&#xff0c;可以考虑以下几种方法&#xff1a; 方法一&#xff1a;使用 Microsoft Visio …

C++IO流(详解)

C语言的输入与输出 在C语言当中&#xff0c;我们使用最频繁的输入输出方式就是scanf与printf&#xff1a; scanf&#xff1a; 从标准输入设备&#xff08;键盘&#xff09;读取数据&#xff0c;并将读取到的值存放到某一指定变量当中。 printf&#xff1a; 将指定的数据输出到…

Vivado综合属性系列之十三 FSM_ENCODING

目录 一、前言 二、FSM_ENCODING ​2.1 属性介绍 ​2.2 工程代码 2.3 结果 ​2.4 参考资料 一、前言 ​状态机的实现有很多方式&#xff0c;如auto&#xff0c;one_hot&#xff0c;sequential&#xff0c;如下图中Synthesis中-fsm_extraction的配置项&#xff0c;但此处作用范…

【AI面试】降低过拟合的方式方法横评探究

对于一个“训练调参工程师”来说&#xff0c;在训练过程遇到过拟合现象&#xff0c;是常事。当然&#xff0c;如何降低过拟合&#xff0c;也是在面试过程中&#xff0c;经常被面试官问到的问题&#xff08;没啥可问的&#xff0c;就只能这样问了&#xff09;。以下是我们会常考…

HEVC中,mvd怎么写进码流的?

文章目录 Motion vector difference syntax 标准文档描述语义解释设计意义 Motion vector difference syntax 标准文档描述 语义解释 MvdL1[ x0 ][ y0 ][ compIdx ] L1列表的mvd x0,y0 表示亮度快左上角坐标 compIdx 0表示水平 compIdx 0表示垂直 mvd_l1_zero_flag&#xff1a…

DRF之JWT认证

一、JWT认证 在用户注册或登录后&#xff0c;我们想记录用户的登录状态&#xff0c;或者为用户创建身份认证的凭证。我们不再使用Session认证机制&#xff0c;而使用Json Web Token&#xff08;本质就是token&#xff09;认证机制。 Json web token (JWT), 是为了在网络应用环…

给osg::Geometry(自己绘制的几何体)添加纹理(二)

目录 1. 前言 2. 自会集合体贴纹理 2.1. 一张图贴到整个几何体 2.2. 几何体每个面贴不同的图片纹理 3. 说明 1. 前言 前文讲述了如何给osg自带的几何体&#xff0c;如&#xff1a;BOX等&#xff0c;添加纹理&#xff0c;文章参考链接如下&#xff1a; osg给osg::Geometry&…

动态规划专题一(动态规划的基本模型)

先上例题1 1258&#xff1a;【例9.2】数字金字塔 信息学奥赛一本通&#xff08;C版&#xff09;在线评测系统 (ssoier.cn) 1258&#xff1a;【例9.2】数字金字塔 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 36341 通过数: 21547 【题目描述】 观察下面的数字…

HotSpot虚拟机OutOfMemoryError异常

目录 一、JVM内存区域 二、堆中对象 1. 对象的创建 2. 对象的内存布局 3. 对象的访问定位 三、OOM异常 1. 堆OOM异常测试 2. 栈SOF异常测试 1)&#xff1a;栈容量过小 2)&#xff1a;大量本地变量 3. 常量池OOM异常测试 4. 方法区测试 5. 堆外内存测试 四、参考资料…

详解FreeRTOS:嵌入式多任务系统的任务互斥和优先级反转(理论篇—9)

在嵌入式多任务系统中,有些资源必须是独占使用的,多个任务对这样的资源的并发访问将导致错误的发生。一般来说,对需要独占使用的资源必须使用互斥方法将对其的并发访问串行化。 在优先级多任务系统中引入互斥方案,会导致任务优先级反转的问题:假如某时低优先级的任务占有…

Zabbix之2023 Zabbix6.4最新高级特性、优缺点及其实现原理总结

目录 Zabbix高级特性1. 自动发现 Zabbix高级特性2. 分布式监控 Zabbix高级特性3. 高级报警 Zabbix高级特性4. 可视化 Zabbix高级特性5. API Zabbix高级特性6. 高可用性 Zabbix高级特性7. 安全性 Zabbix高级特性8. 无代理监控 SNMP IPMI JMX Zabbix高级特性9. Agent…

【Windows】局域网内远程桌面控制

【Windows】局域网内远程桌面控制 1、背景2、设置登录密码3、启用远程桌面4、远程示例 1、背景 工作中的很多场景需要远程操作&#xff0c;这时候可以借助远程桌面应用程序实现&#xff0c; 比如AnyDesk、向日葵、TeamViewer等。 windows10系统&#xff0c;其操作系统自带了远…

python基础知识(三):比较运算符、布尔运算符和位运算

目录 1. 比较运算符2. 布尔运算符3. 位运算 1. 比较运算符 比较运算符通常为以下6种&#xff1a; (1) 大于">“&#xff0c;比较两个数a、b的大小&#xff0c;比较的结果如果a大于b则为True&#xff0c;否则为False&#xff1b; (2) 大于等于”>“&#xff0c;比较…

【论文阅读笔记】Contrast image correction method

论文小结&#xff1a; 本文是2010年发表出来的一篇文章&#xff0c;提出的方法是一种增强对比度的方法&#xff0c;其基本原理是自适应参数的 ganma 校正。ganma 校正的目标在于同时校正曝光过度和曝光不足区域的图像。   同时&#xff0c;为了防止光晕伪影&#xff0c;使用双…

vue 【git】

文章目录 前言一、git 工作流程二、常用的git命令1.git 初始化2.修改的内容提交到暂存区3.暂存区的内容提交到本地仓库4.创建分支5.切换分支6.展示分支7.删除分支8.合并指定分支到当前分支9.本地仓库的内容提交到远程仓库10.合并分支11.上传本地仓库分支到远程仓库分支 前言 什…

路径规划算法:基于闪电搜索优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于闪电搜索优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于闪电搜索优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

第12届蓝桥杯Scratch国赛真题集锦

程题 第 1 题 问答题 博土江出题 题目说明 编程实现:博土汪出了5道加法选择题&#xff0c;请同学们给出正确选项 具体要求 1).博士汪问:“n m ?”&#xff0c;n (0-9随机数)&#xff0c;m (0-9随机数) 2).下方A、B、C、D四个选项&#xff0c;随机一个选项为正确答案&#xff…

通过Python的PyPDF2库合并多个pdf文件

文章目录 前言一、PyPDF2库是什么&#xff1f;二、安装PyPDF2库三、查看PyPDF2库版本四、合并多个pdf文件1.引入库2.定义pdf路径3.获取所有要合并的PDF文件名4.创建一个新的PDF文件5.遍历所有PDF文件名6.打开PDF文件7.创建PDF阅读器对象8.遍历PDF中的每一页&#xff0c;并将它们…

嵌入式c语言-进制转换

10进制转2进制 以10进制的16,18为例子 利用短除法 每次除以2并且记录余数 直到商为1 然后从下往上写出 商余数 10进制转16进制 以55 180 500举例 利用短除法 每次除以16并且记录余数 直到商为1 然后从下往上写出 商余数 商和余数要写成16进制的形式 10进制转8进制 以15为…

(浙大陈越版)数据结构 第三章 树(上) 3.3 二叉树的遍历

目录 3.3.1 遍历&#xff08;先中后&#xff09; 二叉树的遍历 先序遍历&#xff1a; 中序遍历 后序遍历 tips: 3.3.2 中序非递归遍历 非递归算法实现的基本思路&#xff1a;使用堆栈 中序遍历的非递归算法具体实现方法为&#xff1a; 3.3.3 层序遍历 难点 解决方法…