C++primer plus学习笔记
第一章 预备知识
1.1 C++简介
C++融合了3种不同的编程方式:
- C语言代表的过程性语言
- C++在C语言基础上添加的类代表面向对象语言
- C++模型支持的泛型编程
C++继承C语言高效、简洁、快速和可移植性的传统
1.2 C++简史
在20世纪70年代,C和Pascal这样的语言引领人们进入结构化编程时代。
在20世纪80年代,C语言称为统治地位的编程语言,因素如下:
- C能够生成简洁、快速运行的程序
- 提供处理硬件问题的能力,如管理通信端口和磁盘驱动器
在这个年代,出现了新的编程模式:面向对象编程(OOP).
1.2.1 C语言
20世纪70年代早期,Bell实验室的Dennis Ritchie为了设计开发UNIX的通用性、可移植性等,在旧语言的基础上开发了C语言
汇编语言依赖于计算机的内部机器语言,可以直接操作硬件。
1.2.1 C语言编程原理
计算机语言要处理两个概念—>数据和算法。
数据是程序使用和处理的信息。
算法是程序使用的方法。
C语言是过程性语言,其强调的是编程的算法方面,其也是一种结构化的编程方式。
C语言的新原则:自顶向下设计,理念是:将大型程序分解成小型,便于管理的任务。
1.2.3 面向对象编程
过程性语言(C语言)强调算法,OPP(C++、Java等)强调数据。
OOP不像过程性编程,其理念是设计与问题的本质特性相对应的数据格式。区别如下:
过程性语言(让问题来满足语言)
OOP编程(让语言来满足问题)
在C++中,类是一种规范
,描述了新型数据格式
,对象则根据类规范构造的特定数据结构
。
类规定了可使用哪些数据
来表示对象
以及可以对这些数据执行哪些操作
。
OOP程序设计方法:先设计类(可以明确表示程序要处理的东西)
,然后设计使用类的对象的程序
。
从低级组织(如类)
到高级组织(如程序)
的处理过程叫作 自下而上
的编程思想。
类定义 = 数据 + 方法
OOP可以创建可重用的代码,减少大量的工作,信息隐藏可以保护数据,使其免遭不适当的访问。
不同的环境(Windows和Macintosh
)下提供编程的类库
,可以方便地重用
和修改现有的、经过仔细测试的代码。
1.2.4 C++和泛型编程
泛型编程(generic programming)是C++支持的另一种编程模式。与OOP目标系统。
术语:泛型(指创建独立于类型的代码)
。
OOP与泛型编程的区别:
OOP
强调编程的数据
方面,是管理大型项目
的工具泛型编程
强调独立于特定数据类型
,提供执行常见任务(如对数据排序或合并链表)
的工具。
C++泛型编程需要对语言进行扩展,以便于可以只编写一个泛型(即不是特定类型的)函数
,并将其用于各种实际类型
。
1.2.5 C++的起源
C++是C语言的超集,意味着任何有效的C程序都是有效的C++程序。
C++可以使用已有的C软件库。库是编程模块的集合,提供解决很多常见的编程问题的解决办法
1.3、可移植性和标准
C++是C语言的超集
,任何有效的C程序都是有效的C++程序。
1.3.1 可移植性的两个障碍
- 硬件:分块放置模块,通过重写模块,最大限度降低可移植性问题。
- 语言上的差异性:国际组织定义了C语言标准、定义了C++99、C++11、C++14等标准。
1.3.2 C++的二重性
- OOP提供了高级抽象
- C提供了低级硬件访问
C++既可以通过OOP进行抽象,也可完成类似C一样的对硬件访问的操作。
1.4、程序创建的技巧
1.4.1 编程步骤
C++实现 | 源代码文件的扩展名 |
---|---|
UNIX | C、cc、cxx、c |
GNU C++ | C、cc、cxx、cpp、C++ |
Digital Mars | cpp、cxx |
Borland C++ | cpp |
Watcom | cpp |
Microsoft Visual C++ | cp、cpp、cc、cxx、C++ |
1.4.2 编译和链接
UNIX编译和链接
//第一种 在终端进入cpp文件目录时,输入g++ -o 文件名 文件名.cpp
cd desktop //进入桌面
cd Demo //进入一个文件夹
vi C_p.cpp //编写C_p.cpp 用:wq
g++ -o C_p C_p.cpp //编译
./C_p //执行//第二种
g++ C_p.cpp //编译,会产生一个a.out的文件
./a.out //运行
linux
g++ spiffy.cxx//该命令将生成可执行文件a.outg++ spiffy.cxx -lg++//有些版本可能要求链接c++库//如果要编译多个源文件,只需将它们全部放到命令行中即可
//此时会生成一个a.out可执行文件和两个目标代码文件my.o和precious.o
g++ my.cxx precious.cxx//如果接下来修改了其中的某个源代码文件,如mu.cxx,则可以使用my.cxx 和 precious.o 来重新编译
g++ my.cxx precious.o
1.4.3 常见的编译器
- Linux/UNIX : GNU gcc/g++
- Windows :软件IDE
- Mac OS : Xcode自带g++和clang
第二章 开始学习C++
2.1 进入C++
/*第一个C++程序*/
#include <iostream> //a PREPROCESSOR directive-(预处理指令)
using namespace std; //make definition visible(使定义可视化)
int main(void) //function header(函数头)
{ //start of function bodycout<<"Come up an C++"<<endl; //messagecout<<endl; //start a new linecout<<"You won't regret it"<<endl; //more outputreturn 0; //terminate main()
} //end of function body
对于一个C++ 程序主要包含以下元素:
- 注释:由前缀
//
或者是/* */
标识 - 预处理器编译指令
#include
- 函数头:
int main()
- 编译指令:
using namespace
- 函数体:用
{ }
括起来 - 使用C++ 的
cout
工具显示消息的语句 - 结束
main()
函数的return
语句
2.1.1 main()
函数头
main() 被启动代码调用,而启动代码是编译器添加到程序中。
函数头描述
main()
和 OS(UNIX/Linux、Windows、mac os等)直接的接口
。
空括号的main()
不接受任何参数。
int main(void)
{statementreturn 0;
}
main()
函数描述了函数的行为。同时也构成了两部分的 函数定义(function definition)
:第一行int main()
函数叫做 函数头(function heading)
,花括号({和})中包括的部分叫 函数体
。
函数体:指出函数应做什么的计算机指令。
在C++中,每条完整的指令叫做语句
。所有的语句都是以 分号
结束。
main()
中最后一条语句叫做 返回语句(return statement)
,结束main()函数。
⚠️注意:C++程序通常是以main()
函数开始执行,如果没有,程序不完整,则编译器会指出未定义main()函数
。
大小写都必须准确
不需要
main()函数
的特殊情况:
- Windows中的
动态链接(DLL)
模块。- 单片机或机器人芯片
⚠️补充
在C++中 int main() 与 int main(void)等效
在C中 int main() 与 int main(void)有所不同
用int main()的话允许您使用任意数量的参数调用main。 main(void) 强制您在没有参数的情况下调用main
2.1.2、C++注释
C++中的注释以 双斜杠(//)
打头。以行尾
作为结束。
注释的作用:为程序提供解释说明,使得程序通俗易懂。
通常标识程序的一部分或者是标识代码的某个方面。
注意点:编译器不会运行,会直接忽略注释。
C++也可以识别C语言的注释
C语言风格的注释
多行注释
:符号/*
和*/
之间,以*/
作为注释的结束。单行注释
:以双斜杠(//)
开始,行尾
作为结束。
2.1.3、预处理器和头文件
如果程序要使用C++输入或输出工具时,必须使用两行代码:
#include <iostream>
using namespace std;
使用了 #include
作为了预编译指令,也就是所谓的预处理器指令。
预处理器的操作:在源代码被编译之前,替换或添加文本。
例如:
#include <iostream>
像iostream这样的文件叫做 包含文件(include file)
———— 也被包含在其他的文件中,所以也叫做 **头文件(header file)
**。
头文件命名约定
头文件类型 | 约定 | 示例 | 说明 |
---|---|---|---|
C++旧式风格 |
以 .h 结尾
|
iostream.h | C++程序可以使用 |
C旧式风格 |
以 .h 结尾
|
math.h | C、C++ 程序可以使用 |
C++ 新式风格 | 没有扩展名 | iostream | C++程序可以使用,使用namespace std; |
转换后的C | 加上前缀c,没有扩展名 | cmath | C++ 程序可以使用,可以使用不是C的特性,如namespace std; |
2.1.4、名称空间(namespace)
如果程序中使用的是 iostream
,那么就需要使用名称空间编译指令来使得对程序可用。
using namespace std;
也叫做 using编译指令。
2.1.5、使用cout进行C++的输出
cout<<"Come up an C++"<<endl;cout<<"You won't regret it"<<endl;
双引号
括起来的部分就是要打印的消息。
在C++中,使用双引号
括起来的一系列字符叫做 字符串
,由于若干个字符组合而成。
<<
指出信息流动的路径,cout是一个预定义的对象
。
初识运算符重载
<< 既可以是插入运算符,也可以是左移运算符。
典型的运算符重载的情况,通过重载,同一个运算符代表不同的含义。具体含义编译器会通过上下文来确定。
常见的运算符重载例子
&
----> 既表示地址运算符,又表示按位AND运算符。*
----> 既表示乘法,也表示对指针解除引用。
控制符endl
cout<<endl;
endl 是C++中的一个特殊符号,作用:重起一行。
在输出流中插入endl
使得屏幕光标移到下一行开头。
endl在头文件iostream
中定义,且位于名称空间std
中。
换行符
C++也也提供了早期C语言表示换行的方法;C语言符号\n
。
\n
被视为一个字符,名为换行符
,也就是C++中的endl的重起一行
。
显示字符串时,在字符串中包含换行符,而不是在末尾添加endl,可减少输入量。
/*两个语法都是一样的,都是:重起一行*/
cout<<"\n";
cout<<endl;
2.1.6、C++源代码风格
C++中源代码的风格遵循以下规则:
- 每条语句各占一行。
- 每个函数都有一个
开始花括号
和一个结束花括号
,两个花括号各占一行。 - 函数中的语句都相对于花括号进行缩进。
- 与函数名称相关的
圆括号周围没有空白
。
2.2 C++语句
程序代码例子:
#include<iostream>
using namespace std;int main()
{int carrots; // 声明一个整型变量carrots = 25; // 给变量赋值cout<<"我有 "<<carrots<<" 个carrots."<<endl;carrots = carrots - 1; // 对变量进行修改cout<<"快看!快看!现在,我有 "<<carrots<<" 个carrots!"<<endl;return 0;
}
2.2.1 声明语句和变量
在C++中,首次使用变量时,必须声明
。可以避免因拼写错误而难以发现错误。
声明通常指出要存储的数据类型和程序对存储在内存里的数据使用的名称。
程序中的声明语句叫作定义声明
语句,简称定义
。定义会使得编译器为变量分配内存
。
⚠️注意:声明不一定是定义。
2.2.2 赋值语句
赋值语句将值赋给存储单元。
符号 =
叫作赋值运算符
。
C++primer plus学习笔记相关推荐
- 整理:C primer plus 学习笔记
前言:简单看了一遍C Primer Plus, 整理了一下,因为时间比较少,自己理解地比较肤浅,所以第一版比较简陋. 假期的时候应该会有时间再整理一下.------2018/11/5 2019/1/2 ...
- C++ Primer Plus 学习笔记(第 4 章 复合类型)
C++ Primer Plus 学习笔记 第 4 章 复合类型 数组 数组(array)是一种数据格式,能够存储多个同类型的值. 要创建数组,可使用声明语句.数组声明应指出以下三点: 存储在每个元素的 ...
- C++ Primer Plus学习笔记之类和动态内存分配
前言 个人觉得学习编程最有效的方法是阅读专业的书籍,通过阅读专业书籍可以构建更加系统化的知识体系. 一直以来都很想深入学习一下C++,将其作为自己的主力开发语言.现在为了完成自己这一直以来的心愿,准备 ...
- C++ Primer Plus学习笔记之函数探幽
前言 个人觉得学习编程最有效的方法是阅读专业的书籍,通过阅读专业书籍可以构建更加系统化的知识体系. 一直以来都很想深入学习一下C++,将其作为自己的主力开发语言.现在为了完成自己这一直以来的心愿,准备 ...
- 《C++ Primer》学习笔记
这次一定要完整学完 2022/8/24 像编辑器一样思考和理解C++ C++的编程风格:C风格.基于对象.面向对象.泛型和基于组件. 初学建议<C++Primer>和<C++标准程序 ...
- 090518-C++primer 4th学习笔记:1.3节
1.3 C++程序的注释 注释是为了帮助其他人读懂你的程序.注释一般用来简要概述一个算法,标明一个变量的用途,或者解释一段不容易读懂的程序段.注释会在被编译器忽略,所以不会增加可执行程序的大小. ...
- 《C++Primer》学习笔记(6-10章)
第六章 语句 1. if (int i = 3) // i转化成bool值true; 迄今为止,在所有用过的类型中,IO类型可以用作条件,vector和string类型一般不可用作条件 上面,出了if ...
- c++ primer plus 学习笔记
我的机子用Xcode,单位是字节 0开头为8进制 0x为16进制 cout默认输出的是10进制 wchar_t 宽字节,它是一种足够大的整形类型,可以用来表示的是比如中文的编码 c常量一旦被定义,就不 ...
- C++ primer plus学习笔记 (3) _函数
常量指针与指向常量的指针 const int* p;//p先和*结合,const修饰的是 *p,也就是指针指向一个常量(只是说不可以通过指针来改变它) int* const p = &slot ...
最新文章
- 谨慎跟随初始目的不被关联问题带偏
- 二叉搜索树中第K小的元素
- 两个不同的文件相互引用全局变量
- linux nfs共享目录集群,CentOS7通过NFS共享文件夹,主要用于集群部署时候,文件的共享...
- 【学习笔记】浅谈短小可爱的左偏树(可并堆)
- C++ 构造函数体内赋值与初始化列表的区别
- (react+dva+antd)知识点总结
- gridview无法显示完整
- mysql 函数操作_mysql 数学操作函数
- usb加密狗破解原理及方法介绍
- 脸部各部位长痘痘的原因
- 拿下阿里自动化测试岗23k*14薪offer的全程面试记录解析以及总结,一面二面三面,项目,功能,自动化,性能测试,面试题问答
- 我的理想高中作文理想是计算机,我的理想高中优秀作文范文
- 怎么恢复永久删除的文件
- EasyNVR摄像头网页无插件直播H5、谷歌Chrome直播方案中如何降低播放延迟问题
- NodeJs 畅谈异步
- keil 报错解决 Loading PDSC Debug Description failed forSTMicroelectronics STM32xxxx
- Linux操作备忘录
- 爬虫漫游指南:瑞数的反调试陷阱
- 学生德育实践(自选项目)结题表
热门文章
- EXTJS 6 - 日期控件 Date picker 只选年月
- 粵語中不同男人的称呼
- 资深数据科学家教你如何在求职过程中找到心仪工作
- chrome 报错connection is not private. NET::ERR_CERT_COMMON_NAME_INVALID Provisional headers warning
- 小学计算机社团活动简报,多彩社团活动,幸福校园生活——单集镇新河小学开展社团活动简讯...
- 关于软件测试行业现状的一些思考
- Offner光学成像系统
- Hive建表(分区表、非分区表)实例
- DBA职业生涯规划:八步打造高级DBA专家
- ansys workbench收敛判断