目录
第一章笔记
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()函数
的特殊情况:
- Windows中的
动态链接(DLL)
模块。- 单片机或机器人芯片
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.h | C++程序可以使用 |
C旧式风格 | 以 .h 结尾 | math.h | C、C++ 程序可以使用 |
C++ 新式风格 | 没有扩展名 | iostream | C++程序可以使用,使用namespace std; |
转换后的C | 加上前缀c,没有扩展名 | cmath | C++ 程序可以使用,可以使用不是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::
。