C++入门

C++

1. C++与C语言

1.1 相似之处

​ 都包含头文件,声明main函数等。且C++包含C的所有特性,所以C编写的程序可以直接在C++编译器上运行。

1.2 区别

​ C++比C添加了面对对象编程的特性,例如类、对象和继承等。

  • 类:是模板,比如狗是一个类,描述了狗的属性如品种、年龄等。
  • 对象:是类的具体实体,我的柯基就是一个具体对象。
  • 继承:可以从现有的类继承属性和方法。比如从狗类中继承短腿和耐寒得到柯基。
  • 多态:允许使用相同接口处理不同对象。比如定义好了喂食的方式,根据狗的种类(实际对象类型)选择不同的食物。

​ 此外,C++除了C的标准库,还提供了STL标准库,包含一系列类模板和函数模板,为开发者提供更多数据结构和算法工具。

​ 同时,C++提供了处理异常语句try,catch,throw处理异常语句,帮助我们处理异常。

2. C++基础语法

2.1 标准输入输出

2.1.1 标准输出流cout

1
2
3
4
5
6
#include <iostream>
using namespace std;
int main(){
cout << "Hello World";
return 0;
}

​ C++标准程序库中的所有标识符都被定义于一个名叫std的namespace中。使用<using namespace std;>之后,就可以直接使用标准命名空间中的所有标识符,比如cout、cin、endl等而不必使用完整的限定名表示。

​ 如若不适用<using namespace std;>,则可以像下面一样写程序。

1
2
3
4
5
#include <iostream>
int main(){
std::cout << "Hello World";
return 0;
}

​ 本质是将字符串插入到cout对象中,并以cout对象作为返回值返回,因此可以用<<在后面连续输出多个内容。

1
2
3
4
5
6
#include <iostream>
using namespace std;
int main() {
cout << "Hello World " << "but this is not " << "the end";
return 0;
}

​ 中间插入endl操作符起换符作用。

1
2
3
4
5
6
#include <iostream>
using namespace std;
int main() {
cout << "Hello World " << "but this is not " << endl << "the end";
return 0;
}

​ 输出结果:

1
2
Hello World but this is not
the end

2.1.2 标准输入流cin

​ 接受输入之前,先定义一个类型一致的对象用来存放数据,之后利用cin >>输入操作符接收用户键盘输入。

1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
int main() {
int a;
cout << "input number" << endl;
cin >> a;
cout << "Get " << a << endl;
return 0;
}

2.1.3 标准库iostream

​ iostream就是input output stream,意思就是输入输出流。iostream(.h)库声明的对象分为两组:窄字符(char)和宽字符(wchat_t)。

​ 窄字符主要包括:

1
2
3
4
cin  标准输入流
cout 标准输出流
cerr 输出错误的标准输出流
clog 用于记录的标准输出流

​ 宽字符主要包括:

1
2
3
4
wcin
wcout
wcerr
wclog

​ 窄字符宽字符的区别:

  • char为一个字节,wchar_t的大小与平台相关,通常为2或4字节,可以用于编码更多的字符(比如中文)。
  • char使用的默认字符集(ASCII),而wchar_t使用的是宽字符集(比如UTF-16或UTF-32)。
  • 处理方式不同,char类型字符串使用字符数组char[]存储,wchar_t类型字符串使用宽字符数组(wchar_t[])来存储。

2.2 变量与数据类型

2.2.1 声明和初始化

1
2
3
4
5
6
7
int main(){
int a;
a = 20;
int b = 20;
int c,d,e;
int f = 1,g = 2,h = 3;
}

2.2.2 数据类型

C

基本数据类型之间的运算规则:

  • 自动类型提升:容量小的与容量大的数据类型做运算时自动提升为容量大的数据类型。
  • 强制类型转换:自动类型提升的逆运算。把容量大的数据类型转换为容量小的数据类型。
  • short/char -> int -> long -> float ->double(short/char类型的变量做运算时结果为int)

2.3 标识符命名规则

  1. 26字母、数字和_组成。
  2. 数字不开头。
  3. 不可以用关键字。
  4. 不能连续两个下划线开头,也不能以下划线加大写字母开头,这些被C++保留在标准库使用。
  5. 函数体以外的标识符不能以_开头。
  6. 变量名一般小写。
  7. 自定义类名一般以大写字母开头。
  8. 如果包含多个字符,一般使用下划线分割或者后面的单词首字母大写。

C++中的关键字

20240212215249

2.4 基本数据类型

整型

2B short (-2^15~2^15-1)

4B int (-2^31~2^31-1)

4B long (-2^31~2^31-1)

8B long long (-2^63~2^63-1)

浮点型

4B float (-3.403E38~3.403E38) 表示数的范围大于long型 声明float型变量必须以F或f结尾。

8B double (-1.798E308~1.798E308) 精度是float的两倍

8B long double

1
2
3
4
5
6
int main(){
float m = 13.165f;
double n = 14.678934;
long double = 789.123456789;
return 0;
}

字符型

2B char 一个字符占2B

表现方式:

‘a’ 只能填一个字符

使用unicode值表示字符型常量,比如’\uXXXX’,一个字符可以存储一个字母或一个汉字或其他的一个字符。

使用转义字符\将其后的字符转换为特殊字符型常量,’\n’换行符,’/t’制表符。

字符集:ASCII码,UTF-8。

1
2
3
4
int main(){
char k = 'A';
return 0;
}

布尔型true/false

内存中分配4字节。

2.5 运算符

算术运算符

20240212215345

​ 取模运算符%只适合整数操作数。如果要对浮点数进行类似操作,使用fmod() (需要引入头文件)。

关系运算符

img

​ 如果操作数是浮点数可能因精度问题而导致结果不符预期,通常建议对浮点数的比较使用误差范围,而非直接关系运算。

逻辑运算符

​ C++采用短路求值策略,只在需要时执行后续的布尔表达式。因此布尔表达式的顺序很重要。

位运算符

img

位运算只适用于整数类型,在unsigned类型上执行位移运算时不要引入符号扩展。

其他

​ 如赋值、逗号、下标、取地址、解引用。

2.6 if语句

if

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;

int main(){
int num = 42;
if(num % 2 == 0){
cont << "The number is even." << endl;
}
return 0;
}

if-else

if-else if-else

未完待续