一、基础知识
写在前面:在这个专题,我将会把自己学习Cpp的笔记整理为几个部分,与大家分享,主要的参考资料是B站上的课程链接如下:https://www.bilibili.com/video/BV1et411b73Z?p=237&vd_source=d02fb26eb2345ac42c054db0bb8d8864
主要的参考书籍是《Cpp Primer Plus》
(1)前言
C++融合了三种不同的编程方式:1、C语言代表的过程性语言,2、C++在C语言的基础上添加的类代表的面向对象语言,3、C++模板支持的泛型编程。使用C++的原因之一是为了利用其面向对象的特性。要利用这种特性,必须对标准C语言知识有较为深入的了解,因为它提供了基本类型、运算符、控制结构和语法规则。
面向对象编程(Object Oriented Programming, OOP)的诞生,试图让语言来满足问题的要求,其理念是设计与问题本质特性相对应的数据格式。在C++中,类是一种规范,它描述了这种新型数据格式,对象是根据这种规范构造的特定数据结构。OOP编程是将数据和方法合并为类定义,这样能起到信息隐藏的作用。多态能够让你为运算符和函数创建多个定义,通过编程上下文来确定使用哪个定义。继承能够让你使用旧类派生出新类。
泛型编程(Generic Programming)是C++支持的另一种编程模式,OOP强调的是编程的数据方面,而泛型编程强调的是独立于特定数据类型。OOP是一个管理大型项目的工具,而泛型编程提供了执行常见任务的工具。
名称C++来自C语言的递增运算符C++,该运算符将变量自加一。名称C++表明,它是C的扩充版本。
(2)C++源文件的拓展名
具体使用什么拓展名取决于C++的实现,
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++ | cpp, cxx, cc |
Metrowerks CodeWarrior | cpp, cp, cc, cxx, c++ |
(3)一个Cpp程序的基本结构
#include <iostream> //预处理编译指令#include
int main(void) //主函数,程序入口
{ //函数体
using namespace std; //编译指令
cout << "Come up and C++ me some time.";
cout << endl;
cout << "You won't regret it!" << endl;
return 0;
}
为什么main()
不能使用其他的名称?因为运行在C语言、C++程序时,通常从main()
函数开始执行。因此,如果没有main()
,程序将不完整,编译器将指出未定义main()
函数。也存在一些例外情况,例如,在Windows编程中,可以编写一个动态链接库(DLL)模块,这是其他Windows程序可以使用的代码,但是DLL模块不是独立的程序,因此不需要main()
。
在C++中,分号;
标志了语句的结尾。因此,在C++中,回车的作用就和空格或制表符相同,也就是说在C++中,通常可以在能够使用回车的地方使用空格,既可以把语句放在几行之上,也可以把几条语句放在同一行上。
(4)Cpp关键字
asm | do | if | return | typedef |
---|---|---|---|---|
auto | double | inline | short | typeld |
bool | dynamic_cast | int | signed | typename |
break | else | long | sizeof | union |
case | enum | mutable | static | unsigned |
catch | explicit | namespace | static_cast | using |
char | export | new | struct | virtual |
class | extern | operator | switch | void |
const | false | private | template | volatile |
const_cast | float | protected | this | while |
continue | for | public | throw | while |
default | friend | register | true | |
delete | goto | reinterpret_cast | try |
(5)C++运算符
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
+ | 算术运算符 + + + | 3 + 2 | 5 |
- | 算术运算符 − - − | 3 - 2 | 1 |
* | 算术运算符 × \times × | 3 * 4 | 12 |
/ | 算术运算符 / / / | 4 / 2 | 2 |
= | 赋值运算符= | a = 1 | a = 1 |
% | 取模运算符 m o d mod mod | 10 % 3 | 1 |
++ | 单目运算符++ | a=2;b=a++ 或a=2;b=++a | a=3;b=2 或a=3;b=3 |
-- | 单目运算符-- | a=2;b=a-- 或a=2;b=--a ; | a=1;b=2 或a=1;b=1 |
sizeof | 单目运算符sizeof | sizeof(int) | 4 |
&& | 逻辑运算符与 | a=1;b=2; a==1 && b==2 | 1 |
|| | 逻辑运算符或 | a=1;b=2; a==1 || b==0 | 1 |
! | 逻辑运算符非 | a=1;a!=1 | 0 |
and | 逻辑运算符与 | ||
or | 逻辑运算符或 | ||
not | 逻辑运算符非 | ||
^ | 位运算符^ 异或 | a=1;b=2;a=a^b;b=a^b;a=a^b; | 交换a ,b 的值 |
. | 成员访问符. 用于通过变量访问结构体成员,或访问类的成员 | struct book mybook; mybook.name | 访问book 成员变量的name 成员 |
-> | 成员访问符-> 用于通过指针访问结构体成员,或访问类的成员 | ||
& | 取地址运算符& ,引用运算符 | int a=2; int* b=&a | b 代表了a 变量在内存中的存放地址 |
* | 解引用运算符* | int a=2; int* b=&a; *b | 2 |
new | 内存分配运算符 | int* pt = new int; | 为指针pt 分配了一个int 大小的空间 |
delete | 内存分配运算符 | int* pt = new int; delete pt; | 回收了pt 的内存空间 |
, | 逗号运算符 | int i, j; | 分隔声明的名称 |
?: | 三目运算符?: | int a = 1 > 2? 1: 0; | a 的值为0 |
C++使用布尔常量值true、false
而无需包含任何头文件,但是C语言需要包含stdbool.h
后,才能够使用这两个布尔值常量。
C++标准提供了逻辑运算符的另一种表达方式,标识符and、or、not
都是C++的保留关键字,但是它们不是C语言的保留关键字,若C语言需要使用这种方式则需要包括头文件iso646.h
,C++不要求使用头文件。