目录
第二章. 开始学习C++
1. 主函数
int main() 等效于 int main(void)
即空括号等效于不接受参数。main函数相当于程序与系统的接口,可以看作返回值给操作系统并不给程序,区分大小写。
2. 预处理器
与 C 不同,C++ 风格的头文件没有拓展名,即没有 .h 后缀,如 iostream。
命名空间如:
using namespace std;
使用using编译指令,可以更明确的指示所使用的变量或函数等属于哪。也可以只使用命名空间的某些元素,如:
using std :: cin
using std :: cout
来直接使用 cout,cin。
3. endl
endl 在 iostream 头文件中定义,在 std 命名空间中,为控制符,作用与 '\n' 类似,使光标换行。
第三章. 处理数据
1. 简单变量
变量名第一个字符不能是数字,区分大小写,只能是数字、字符和下划线(_),不能将C++关键字作为变量名,不要创建以下划线开头的变量名,把它留给标准库。
2. 整型
short (int) 至少16位;int 至少与 short 一样长;long (int) 至少32位; long long (int) 至少64位,至少与 long一样长。
3. C++ 初始化:
int wrens = 432;
int ham = { 24 };
int emus {7};
若大括号中没用东西,置零。这种形式只能用常量,不能用变量初始化。
int rocs = {}; // rocs = 0
int psy {}; // psy = 0;
int n = 10;
int pn { n }; // 不可以
整型字面值:即显示书写的常量,如200、173。C++ 使用前1-2位标识进制,第一位1-9表示十进制,0(数字零表示八进制,0x 或 0X 表示十六进制。
使用控制符可以使输出为想要的进制方式。
cout << std::dec; // 以后cout数字时输出十进制
cout << std::hex; // 以后cout数字时输出十六进制
cout << std::oct; // 以后cout数字时输出八进制
4.字符
char 类型实际是整型,它是否有符号由 C++实现决定。字符型有扩展类型 wchar_t,具体位数由系统底层决定,用 wcin 和 wcout 处理扩展字符流。
wchar_t bob = L'p';
wcout << L"tall" << endl;
char16_t char32_t 同理,前者长16位,后者长32位,都是无符号类型。前者用前缀 u 表示,后者用 U 表示。
char16_t ch1 = u'q';
char32_t ch2 = U'\U0000222B'; // U\表示通用字符名,\u后接8位16进制,
// \U后接8位16进制,表示其他的字符名,如日耳曼元
// 音等。
5. bool
true 和 false 可以转换成 int 类型,true 是 1, false 是0。
6. const限定符
类似#define,创建一个字符常量。要初始化,无法声明后再赋值。
7. 浮点数
float 至少32位,double 至少48位,且不少于 float,long double 不少于 double。有效位由低到高。浮点常量默认 double。
8. 算数运算符
求模时一正一负, 符号满足:(a / b) * b + a % b = a。
9. 类型转换
0 转换成 bool 为 false, 非0为 true。
强制类型转换:
int thorn;
(long) thorn // 转成long
long (thorn) // 转成long
计算机最自然的类型是 int 和 double,如两个 short 相加,计算机会先转成 int 结果再转成 short。
auto 关键字声明变量类型时:
auto m = 10; // m type int
auto n = 1.2 // n type double
auto x = 1.3e12L // x type long double
第四章. 复合类型
1. 数组
数组声明时,元素个数可以是常量表达式,如:8 * sizeof(int),不能是变量。sizeof(数组名)是数组所有元素的字节数。数组初始化可以省略 “=“:
int num[8*sizeof(int)]; // 可以
int n =8;
int num2[n]; // 不可以
int count[4] { 12, 16, 11}; // 元素分别为12, 16, 11, 0
2. 字符串
字符串结尾必须有 ‘\0’ ,‘s’ 和 “s” 不同,前者字符,后者字符串,有 ‘\0’。cout 允许字符串拼接:
cout << " I'd give my" " right arm.\n";
// 等价于
cout << " I'd give my right arm.\n";
拼接时第一个字符串的 ‘\0’ 被 ‘r’ 替换。
字符串输入时,cin 遇到 ‘ ’(空格)停止,遇到换行符不读取,留在输入队列。用cin.getline(数组名, 字符个数),读入一行字符,包括 ‘ ’,“字符个数“包括空字符,实际是要-1的,该函数会读取换行符并转成空字符。cin.get(数组名,字符个数)与 cin.getline()类似,也可以输入一个字符(cin,get(ch)),不过不读取换行符,即越不过换行符,需要再加 cin.get() 或 直接 cin.get(数组名,字符个数).get(),跨过换行符。
3. string 类
使用string类要添加头文件string,它在std空间中,要 using namespace std 或者std :: string使用。string类变量,自动处理处理字符串大小,同数组类似,可以用下标访问元素。初始化与字符串数组一样,未初始化的string类长度为0。
string str1 = "I "; //初始化
string str2 {"love "}; // 初始化
cout << str2[0] << endl; //输出'l'
string str3;
str3 = str1 + str2; //拼接
str1 += str2; // 拼接
4. 结构
与C不同,声明已定义的结构的变量时,可以省略关键字 struct,定义结构时,内部元素之间用分号(‘;’)分隔开。结构初化或者赋值时,用逗号(‘,’)始化:
struct dec // 定义结构,元素间用分号
{
char name[20];
float vol;
double price;
};
int main(void)
{
dec duck1 = {"Daq", 0.12, 9.98}; // 初始化结构,元素间用逗号
dec duck2 {"CDA", 0.14, 0.598}; // 另一种初始化方式
dec duck3 {} // duck3个元素置0
dec duck4 = duck1;
}
同类结构可以用 ”=“ 赋值。可以定义没名称的结构类型,即定义时省略结构名称。