<C++>1 C++ 基础知识

本文最后更新于:2023年6月27日 上午

1 C++ 基础知识

根据是否可以操作计算机底层硬件,将程序设计语言分为:低级语言、中级语言、高级语言。

机器语言和汇编语言属于低级语言,因为它们能直接操作计算机的寄存器和内存。

高级语言是面向用户的语言。很多语言在形式上接近算术语言和自然语言,程序员编写方便。使用高级语言编写的程序易读且通用性强,但大部分不能直接接触硬件,也不能直接在计算机上执行。C++ 语言就属于高级语言的范畴。

C++ 既有高级语言的形式,也能在一定程度上以特定方式直接操作硬件。有些观点也将 C++ 划分到中级语言一类。

C 语言是 C++ 的前身。可以认为 C++ 语言是 C 语言的超集。标准的 C 程序也能在 C++ 开发环境下运行。

前置操作:配置 Visual Studio

配置教程

示范一个简单的 C++ 代码

#include <iostream>
using namespace std;

int main() {
	cout << "Melody is learning c++" << endl;
	system("pause");
	return 0;
}

1.1 注释

在代码中添加的说明和解释,用以增强代码可读性

  • 单行注释:

    ...			//单行注释
  • 多行注释:

    ...			/*多行注释*/

1.2 标识符

1.2.1 变量

命名一段指定的数据空间,以便后续调用

语法:数据类型 变量名 = 初始值

//数据类型 变量名 = 初始值;
int n = 0;

1.2.2 常量

常量用于记录程序中不可修改的数据

C++ 中对常量有两种定义方式:

  • #define 宏常量:#define 常量名 常量值
  • const 修饰的变量:const 数据类型 常量名 = 常量值
#include <iostream>
using namespace std;

//声明一个宏常量。宏常量通常放在文件上方
#define num 7

int main() {
    //声明一个 const 修饰的变量
	const int n = 100;
    
	cout << n + num << endl;
	system("pause");
	return num;
}

1.2.3 关键字

C++ 中预先保留的单词(标识符)。这些单词不能被用于定义变量名或常量名。

具体有哪些?略……

1.2.4 标识符命名规则

  1. 标识符名称不能是关键字
  2. 标识符名称只能由 字母数字下划线 组成
  3. 第一个字符必须是 字母或下划线(即,不能以数字开头)
  4. 表示符中字母区分大小写
  5. 在相同作用域内,标识符不能重复进行定义。

1.3 数据类型

C++ 中创建变量或常量时,必须指定相应的数据类型

1.3.1 整形

整数类型的数据

C++ 中的整形有以下几种,其取值范围与所占空间不同

数据类型 占用空间 表示范围
short 2 字节 -2^15^ ~ 2^15^ - 1
int 4 字节 -2^31^ ~ 2^31^ - 1
long 4 字节(Windows、32 位 Linux)或 8 字节(64 位 Linux) -2^31^ ~ 2^31^ - 1
long long 8 字节 -2^63^ ~ 2^63^ - 1

语法:

int n = 0;
long l = 0;
long long ll = 0;

1.3.2 实型(浮点型)

用于表示小数

有以下几种:

数据类型 占用空间 表示范围
float 4 字节 7 位有效数字
double 8 字节 15 ~ 16 位有效数字

语法:

float f = 3.14f;			//这里和 Java 相同,float 需要加上 f
double d = 3.14;
float f2 = 3e3;				//科学计数法。3e3 == 3 * 10 ^ 3
double d2 = 3e-10;			//科学计数法。3e-10 == 3 * 10 ^ -10

1.3.3 字符型

用于显示单个字符,占用 1 字节

存放时,存放的是字符对应的 ASCII 编码

几个重要的 ASCII 码:

  • a:97
  • A:65
  • 0:48

经测试,C++ 中的 char 也可以作为数字进行运算

语法:

char c = 'a';
char c1 = 99;			//这个场合,c1 是 'c'
char c2 = 'a' + 9;		//这个场合,c2 是 'j'
int n = c2 - 16;		//这个场合,n 是 90

#1.3.3.1 转义字符

用于表示一些不能显示出来的 ASCII 字符

转义字符 含义
\a 警报
\b 退格,将当前位置前移一列
\f 换页,将当前位置移到下页开头
\n 换行,将当前位置移到下一行开头
\r 回车,将当前位置移到本行开头
\t 水平制表
\v 垂直制表
\\ 一个反斜线 \
\' 一个单引号
\? 一个问号 ?

1.3.4 字符串型

用于表示一串字符

两种风格:

  • C 风格字符串:char 变量名[] = "字符串值";

    char str1[] = "字符串1";		//注意不能这样写:char[] str2 = "..";
  • C++ 风格字符串:string 变量名 = "字符串值";

    使用前需要包含 string 的头文件

    #include <string>
    ...
    string str2 = "字符串2";

1.3.5 布尔类型

bool 代表真或假的值,占用 1 字节

bool 类型只有两个值:

  • true —— 真(本质是1)
  • false —— 假(本质是0)

布尔类型中,只要是非 0,就代表真

语法:

bool b = true;
cout << b << endl;			//此处输出 1

1.3.6 sizeof 关键字

该关键字可以统计数据类型所占内存的大小

语法:sizeof(数据类型/常量)

#include <iostream>
using namespace std;

#define num 7

int main() {
	const long long n = 100;
	int n2 = 0;
    
	cout << sizeof(num) << endl;			//输出 4
	cout << sizeof(n) << endl;				//输出 8
	cout << sizeof(n2) << endl;				//输出 4
	cout << sizeof(n2 + num + n) << endl;	//输出 8
    cout << sizeof(short) << endl;			//输出 2
    
	system("pause");
	return num;
}

1.4 运算符

用于执行代码的运算

这里主要介绍以下四种:

  • 算术运算符:处理四则运算
  • 赋值运算符:用于将表达式的值赋给变量
  • 比较运算符:用于表达式的比较,返回布尔值
  • 逻辑运算符:根据表达式的值返回布尔值

1.4.1 算术运算符

处理四则运算

  • +:正号、相加(+3、3 + 2)

  • -:负号、相减

  • *:乘

  • /:除

  • %:取模(10 % 3)

    两个小数间不能进行取模运算

  • ++:递增(a++、++a)

    ++a 即前置递增、a++ 即后置递增。

    前置递增先递增,后运算表达式;后置递增先运算表达式,后递增。

  • --:递减

1.4.2 赋值运算符

用于把表达式的值赋给变量

  • =:赋值

    int a1, a2, a3;
    a1 = a2 = a3 = 1;						//这样写也是可以的
  • +=:加等于

    a += 2a = a + 2

    -=*=/=%= 同理

1.4.3 比较运算符

用于表达式的比较

  • ==:相当于
  • !=:不等于
  • <:小于
  • > :大于
  • >=:大于等于
  • <=:小于等于

1.4.4 逻辑运算符

  • !:非
  • &&:与(只要有一个为假即为假)
  • ||:或(只要有一个为真即为真)

1.4.5 强制类型转换运算符

当不同类型的量进行混合算术运算时,系统会自动进行合理的类型转换。也能在程序中使用强制类型转换符进行转换。

  • static_cast<类型>(表达式):用于将一种数据类型转换成另一种数据类型

    double d = 3.2;
    double n = static_cast<int>(d * 2);
  • const_cast<类型>(表达式):用于去除指针和引用的常量性。

    const int* const n = new int(2);	// 常量指针常量
    int* i = const_cast<int*>(n);
    *i += 1;
    cout << *n << endl;					// 3
    cout << *i << endl;					// 3

    ——见 [4.1 指针]

    将常量指针转化为非常量指针,且仍指向原来的对象。

    或者,将常量引用转化为非常量引用,且仍指向原来的对象。

    特别地,该运算符不能去除变量的常量性

    const int n = 10;					// 常量
    int* a = const_cast<int*>(&n);
    *a += 5;
    cout << a << "\t" << *a << endl;	// 000000BBFCEFF7D4	15
    cout << &n << "\t" << n << endl;	// 000000BBFCEFF7D4	10

    出现了地址相同,但值不同的奇观!

1.5 数据的输入与输出

在 C++ 中,类库中提供了输入流类 istream 和输出流类 ostream。

cin 和 cout 分别是 istream 类对象和 ostream 类对象。用来实现键盘输入和屏幕输出。

从输入流中获取数据的操作称为提取操作。向输出流中添加数据的操作称为插入操作。

运算符 >><< 是移位操作符。但 C++ 类库的头文件中对其进行了重载,使其分别作为 流提取运算符流插入运算符

当程序中用到 cin 和 cout 时,需要在程序中包含头文件 <iostream>

#include<iostream>

#数据的输入:

可以使用流提取运算符从键盘输入数据并赋值:

int x;
int y;
cin >> x >> y;

cin 中的变量可以是任意基本类型的变量。连续从键盘读取数据时,以空格、制表符或换行为分隔符。

当读取数据时,cin 会忽略并清除第一个空格、制表符或换行符,继续读取下一个字符。这意味着不能将空格、制表符会换行符输入给字符变量。如有需要,应使用 getchar() 函数

使用 cin 输入时,如果输入的是字符类型,则系统会根据变量类型从输入流中提取相应长度的字节。如果输入的是数值类型,需要用空格、制表符或换行符将各个数值分开

字符串可以是字符数组 char[],也能是 string 对象。

#数据的输出:

cout 是一个标准输出对象。使用流插入运算符向屏幕设备输出信息:

cout << "☆" << "★";

cout 语句中的表达式可以是各种基本类型的变量、常量,及由变量和常量组合得到的正确表达式。

在输出时,字符串过长的场合,添加符号 \ 就能将字符串分为多行

cout << "这是一个不那么长,\
但我们可以想象它很长的字符串。";

其实咱不妨就把上面的字符串分为两段输出

cout << "这是一个不那么长," 
    << "但我们可以想象它很长的字符串。";

1.6 头文件和命名空间

#头文件:

C++ 中使用头文件保存程序中用到的声明,如函数声明、常量定义等。

需要先用 #include 语句包含头文件,进而使用该头文件包含的内容

每条 #include 语句仅能包含一个头文件。要包含多个头文件时,要使用多条语句

#include<iostream>			// 包含标准输入输出流
#include<string>			// 包含 string 字符串类
#include<cmath>				// 包含标准数学函数
#include"myh.h"				// 包含了一个自定义的头文件 myh.h
#include"d:\temp\myh.h"		// 包含了 d:\temp\ 目录下的一个自定义的头文件 myh.h

使用尖括号 < > 时,C++ 编译器首先在 C++ 系统设定的目录中寻找要包含的头文件。没有找到时,再去指令指定的目录去找。

使用双引号 “ ” 时,C++ 编译器在用户当前目录下或指令指定的目录下寻找头文件。

#命名空间:

#include<iostream>
using namespace std;		// 使用命名空间 std

一个大型程序通常由不同模块组成。各个模块间的标识符可能重名。为避免命名冲突,C++ 引入了命名空间的概念。

定义一个命名空间的语法如下:

namespace 空间名 {
    ...
}

命名空间又称名字空间。使用关键字 namespace 把大量有逻辑联系的程序实体组合在一个标识符下。

C++ 标准程序库中所有标识符都定义在命名空间 std 中。当程序使用标准程序库的标识符时,如果没有使用 std 命名空间,则 cin、cout、string 乃至 endl 都不能识别。

引用其他命名空间标识符的语法如下:

命名空间名::标识符名;

也能使用 using 语句,简化上述写法。

using 命名空间名::标识符名;					// 可以在本文件中使用指定标识符
using namespace 命名空间名;					// 可以在本文件中使用该命名空间中的所有标识符

<C++>1 C++ 基础知识
https://i-melody.github.io/2022/03/28/C++/入门阶段/1 C++ 基础知识/
作者
Melody
发布于
2022年3月28日
许可协议