C++简介
C++是Bjarne Stroustrup与20世纪80年代开发的。
C语言的升级版*,为C语言增加了面向对象的功能。
- 本帖只代表本人的看法
C++的注释
- 可以使用
//
- 多行可以使用
/**/
C++的基本构成
- 注释
- 预处理编译指令 #include
- 函数头 int main()
- 编译指令 using namespace std
- 函数体 {}
- 使用C++ 的cout工具显示消息的语句
- 结束main函数的 return语句
C++必须声明变量
C++基础
变量
C++提倡使用有含义的变量名
- 名称中只能使用字母,数字,下划线
- 第一个字符不能是数字
- 区分大小写
- 不能使用C++关键字
- 两个下划线和大写字符保留给编译器及使用的资源,一个下划线用作全局标识符
整型
包含10种类型(char, short, int, long, long long 及其有符号的相应的5种), 根据需求使用。
数字后带有后缀一般都有其含义, L或l 代表是long,U或u代表为有符号类型
数字前带有前缀的,0数字 代表是使用8进制, 0x数字的则代表16进制。
浮点数
运算符
+ - * // %
五种运算符常量 const
使用方法
const type name = value
name尽量使用头字母大写。或是有规律的写法
数组
数组类型 + 数组名 + 数组中的元素个数构成数组
int name[10]
数组的初始化值使用大括号,并使用逗号来分隔各个元素
字符串
C风格的字符串具有一种特殊的性质,以空字符结尾,空字符被写作
\0
;- char
- string
- 头部添加
#include <string>
- 初始化 string name = {“xxxx”}; string name;
- 字符串合并 str1 + str2 str1 += str2
- 提取字符串元素 str1[1]
- strlen() 可以计算字符串的长度
- getline(cin, str) 读取一行与char不同
- cin.getline()和getline(cin, str)是两个方法
- 头部添加
结构
声明 struct struct_name { 属性;属性;属性; }
创建结构变量 struct_name name;
赋值 name = {value,value,value};
例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
struct inflatable
{
char name[20];
float volume;
double price;
};
int main()
{
using namespace std;
inflatable guest =
{
"Glorious Gloria",
1.89,
29.99
};
inflatable pal =
{
"Audacious Arthur",
3.12,
32.99
};
cout << "Expand your guest list with " << guest.name << " and " << pal.name << "!\n";
cout << "Your can have both for " << guest.price + pal.price << "!" << endl;
return 0;
}C++ 不推荐使用外部变量 (在函数外声明的变量),但是推荐外部结构声明
结构可以作为函数的参数,也可以作为结果被返回
共用体
- 共用体是一种数据格式,它能够存储不同的数据类型。但只能同时存储其中的一种类型。
- union union_name{属性;属性;属性;}
枚举
- enum工具提供了另一种创建符号常量的方式。
- enum enum_name{value,value,value,…}
指针和自由存储空间
指针,一种变量,其存储的是值的地址。使用
&
就能查看变量的地址*
运算符代表指针 例如 int * p_updates 代表 p_updates 为地址,调用时使用*p_updates 可以得到改地址处的值实例
1
2
3
4
5
6
7
8
9int updates = 6;
int * p_updates;
p_updates = &updates;
cout << "Values: updates = " << updates;
cout << ", *p_updates = " << *p_updates << endl;
cout << "Address: &updates = " << &updates;
cout << ", p_updates = " << p_updates << endl;
*p_updates = *p_updates + 1;
cout << "Now updates = " << updates << endl;声明和初始化指针
- 类型 * p_name
- 一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的,适当的地址。
- 使用new来分配内存
int * pn = new int;
- 使用delete释放内存 一定要配对地使用new 和 delete,否则会出现内存泄漏
delete p_name
- 使用new创建动态数组
int * psome = new int [10];
释放内存的时候delete [] psome
,使用new时,不带方括号时,释放时也不带方括号,带方括号的,释放时必须带方括号- 不要使用delete来释放不是new分配的内存
- 不要使用delete释放同一个内存块两次
- 如果使用
new []
为数组分配内存,则应使用delete []
来释放 - 如果使用
new
为一个实体分配内存,则应使用delete
来释放 - 对空指针应用 delete 是安全的
- 读取元素和使用数组一样使用[0]下标即可
循环
std::ios_base ios_base类封装了C++标准中的流输入输出中不依赖于读写的数据的类型的基本信息,如格式化信息、异常状态、事件回调函数等。
cout.setf(ios_base::boolalpha); 可以将布尔值,由数字转为true, false。
1 | using namespace std; |
- For
1 | for (expression; expression; expression) |