C++面向对象理论复习

目录

1.1C++简介

1.2面向对象程序设计

2.1C++基本语法

2.1.1C++中的分号、语句块

2.1.2C++标识符

2.1.3C++关键字

2.2C++注释

2.3C++数据类型

2.3.1基本的内置类型

2.3.2typedef声明

2.3.3枚举类型

2.3.4类型转换

2.3.4.1静态转换

2.3.4.2动态转换

2.3.4.3常量转换

2.3.4.4重新解释转换

2.4C++变量类型

2.4.1整数类型

2.4.2浮点类型

2.4.3字符类型

2.4.4布尔类型

2.4.5枚举类型

2.4.6指针类型

2.4.7数组类型

2.4.8结构体类型

2.4.9类类型

2.4.10共用体类型

2.5C++变量定义

2.6C++中的变量声明

2.7C++中的左值和右值

2.8C++变量作用域

2.8.1.1局部变量

2.8.1.2全局变量

2.8.1.3初始化局部变量和全局变量

2.8.2.1块作用域

2.8.2.2类作用域

2.9C++常量

2.9.1.1整数常量

2.9.1.2浮点常量

2.9.1.3布尔常量

2.9.1.4字符常量

2.9.1.5字符串常量

2.9.2定义常量

2.9.3#define预处理器

2.9.4const关键字

2.10C++修饰符类型

2.10.1.1signed

2.10.1.2unsigned

2.10.1.3short

2.10.1.4long

2.10.1.5long long

2.10.1.6float

2.10.1.7double

2.10.1.8bool

2.10.1.9char

2.10.1.10wchar_t

2.10.2C++中的类型限定符

2.11C++存储类

2.11.1static

2.11.2extern

2.11.3mutable 

2.11.4thread_local

2.11.5auto

2.11.6register

2.12C++运算符

2.12.1.1算术运算符

2.12.1.2关系运算符

2.12.1.3逻辑运算符

2.12.1.4位运算符

2.12.1.5赋值运算符

2.12.1.6杂项运算符

2.12.2C++中的运算符优先级

3.1C++循环

​编辑3.1.1循环类型

3.1.2循环控制语句

3.1.3无限循环

3.2C++判断

​编辑3.2.1判断语句

3.2.2 ?:运算符

3.3C++函数

3.3.1定义函数

3.3.2函数声明

3.3.3调用函数

3.3.4函数参数

3.3.5参数的默认值

4.1C++数字

4.1.1数学运算

4.1.2随机数

4.2C++数组

4.2.1声明数组

4.2.2初始化数组

4.2.3访问数组元素

4.3C++字符串

4.3.1C风格字符串

4.3.2String类

4.3.2.1string类对象的常见构造

4.3.2.2string类对象的容量操作

4.3.2.3string类对象的修改操作

4.4C++指针

4.4.1指针的使用

4.5C++引用

4.5.1C++引用?指针

4.5.2C++中创建引用

4.5.3引用的主要用途

5.1C++基本的输入输出

5.1.1I/O库头文件

5.1.2.1标准输出流(cout)

5.1.2.2标准输入流(cin)

5.1.2.3标准错误流(cerr)

5.1.2.4标准日志流

5.2C++数据结构

5.2.1定义结构

5.2.2访问结构成员

5.2.3结构作为函数参数

5.2.4指向结构的指针

5.2.5typedef关键字

5.3C++ vector容器

5.3.1创建vector

5.3.2添加元素

5.3.3访问元素

5.3.4获取大小

5.3.5迭代访问

5.3.6删除元素

5.3.7清空 Vector

6.1C++类&对象

6.1.1C++类定义

6.1.2定义C++对象

6.1.3访问数据成员

6.1.4类成员函数

6.1.5类访问修饰符

6.1.5.1.1公有成员(public)

6.1.5.1.2私有成员(private)

6.1.5.1.3受保护成员(protected)

6.1.5.1.4继承中的特点

6.1.6构造函数&析构函数

6.1.6.1类的构造函数

6.1.6.1.1使用初始化列表来初始化字段

6.1.6.2类的析构函数

6.1.7C++拷贝构造函数

6.1.8C++友元函数

6.1.9C++内联函数

6.1.10C++中的this指针

6.1.11C++中指向类的指针

6.1.12C++类的静态成员

6.1.12.1静态成员函数

6.2C++继承

6.2.1基类&派生类

6.2.2访问控制和继承

6.2.3继承类型

6.2.4多继承

6.3C++ 重载运算符和重载函数

6.3.1C++ 中的函数重载

6.3.2C++ 中的运算符重载

6.3.3可重载运算符/不可重载运算符

6.4C++多态

6.4.1虚函数

6.4.2纯虚函数

7.1C++动态内存

7.1.1new 和 delete 运算符

7.1.2数组的动态内存分配

7.1.3对象的动态内存分配


1.1C++简介

C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。

C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。

C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C++。

C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。

注:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。

1.2面向对象程序设计

C++ 完全支持面向对象的程序设计。

包括面向对象开发的四大特性:

  1. 封装(Encapsulation):封装是将数据和方法组合在一起,对外部隐藏实现细节,只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。
  2. 继承(Inheritance):继承是从已有类中派生出新类,新类具有已有类的属性和方法,并且可以扩展或修改这些属性和方法。这样可以提高代码的复用性和可扩展性。
  3. 多态(Polymorphism):多态是指同一种操作作用于不同的对象,可以有不同的解释和实现。它可以通过接口或继承实现,可以提高代码的灵活性和可读性。
  4. 抽象(Abstraction):抽象是从具体的实例中提取共同的特征,形成抽象类或接口,以便于代码的复用和扩展。抽象类和接口可以让程序员专注于高层次的设计和业务逻辑,而不必关注底层的实现细节。

2.1C++基本语法

C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。

  1. 对象:对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。
  2. 类:类可以定义为描述对象行为/状态的模板/蓝图。
  3. 方法:从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。
  4. 即时变量:每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。

2.1.1C++中的分号、语句块

在 C++ 中,分号是语句结束符。它表明一个逻辑实体的结束。

语句块是一组使用大括号括起来的按逻辑连接的语句。

C++ 不以行末作为结束符的标识。

2.1.2C++标识符

C++ 标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。

C++ 标识符内不允许出现标点字符,比如 @、& 和 %。C++ 是区分大小写的编程语言。

2.1.3C++关键字

C++ 中的保留字不能作为常量名、变量名或其他标识符名称。

完整关键字介绍:C++ 的关键字(保留字)完整介绍

2.2C++注释

程序的注释是解释性语句,可以提高源代码的可读性。所有的编程语言都允许某种形式的注释。

C++ 支持单行注释和多行注释。注释中的所有字符会被 C++ 编译器忽略。

C++ 注释一般有两种:

// 一般用于单行注释。注释以 // 开始,直到行末为止。

/* ... */ 一般用于多行注释。以/* 开始,以 */ 终止。

在 /* 和 */ 注释内部,// 字符没有特殊的含义。在 // 注释内,/* 和 */ 字符也没有特殊的含义。因此可以在一种注释内嵌套另一种注释。

2.3C++数据类型

使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。

2.3.1基本的内置类型

C++提供了丰富的内置类型。七种基本的数据类型:

布尔型

bool

字符型

char

整型

int

浮点型

float

双浮点型

double

无类型

void

宽字符型

wchar_t

一些基本类型可以使用一个或多个类型修饰符进行修饰:

如:signed、unsigned、short、long

2.3.2typedef声明

可以使用 typedef 为一个已有的类型取一个新的名字。

2.3.3枚举类型

枚举类型C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。

如果一个变量只有几种可能的值,可以定义为枚举类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。

创建枚举,需要使用关键字 enum。枚举类型的一般形式为:

enum 枚举名{

标识符[=整型常数],

标识符[=整型常数],

……

标识符[=整型常数]

} 枚举变量;

如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始。默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。

2.3.4类型转换

类型转换是将一个数据类型的值转换为另一种数据类型的值。

C++ 中有四种类型转换:静态转换、动态转换、常量转换和重新解释转换。

2.3.4.1静态转换

静态转换是将一种数据类型的值强制转换为另一种数据类型的值。通常用于比较类型相似的对象之间的转换,例如将 int 类型转换为 float 类型。静态转换不进行任何运行时类型检查,因此可能会导致运行时错误。

2.3.4.2动态转换

动态转换通常用于将一个基类指针或引用转换为派生类指针或引用。动态转换在运行时进行类型检查,如果不能进行转换则返回空指针或引发异常。

2.3.4.3常量转换

常量转换用于将const类型的对象转换为非const 类型的对象。

常量转换只能用于转换掉 const 属性,不能改变对象的类型。

2.3.4.4重新解释转换

重新解释转换将一个数据类型的值重新解释为另一个数据类型的值,通常用于在不同的数据类型之间进行转换。重新解释转换不进行任何类型检查,因此可能会导致未定义的行为。

2.4C++变量类型

C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。

变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。

在 C++ 中,类型的长度取决于编译器和计算机架构,然而,C++ 标准规定了不同整数类型的最小范围,而不是具体的字节数,这是为了确保代码在不同的系统上都能正确运行。

2.4.1整数类型

  1. int:用于表示整数,通常占用4个字节。
  2. short:用于表示短整数,通常占用2个字节。
  3. long:用于表示长整数,通常占用4个字节。
  4. long long:用于表示更长的整数,通常占用8个字节。

2.4.2浮点类型

  1. float:用于表示单精度浮点数,通常占用4个字节。
  2. double:用于表示双精度浮点数,通常占用8个字节。
  3. long double:用于表示更高精度的浮点数,占用字节数可以根据实现而变化。

2.4.3字符类型

  1. char:用于表示字符,通常占用1个字节。
  2. wchar_t:用于表示宽字符,通常占用2或4个字节。
  3. char16_t:用于表示16位Unicode字符,占用2个字节。
  4. char32_t:用于表示32位Unicode字符,占用4个字节。

2.4.4布尔类型

  1. bool:用于表示布尔值,只能取true或false。

2.4.5枚举类型

  1. enum:用于定义一组命名的整数常量。

2.4.6指针类型

  1. type*:用于表示指向类型为type的对象的指针。

2.4.7数组类型

  1. type[]或type[size]:用于表示具有相同类型的元素组成的数组。

2.4.8结构体类型

  1. struct:用于定义包含多个不同类型成员的结构。

2.4.9类类型

  1. class:用于定义具有属性和方法的自定义类型。

2.4.10共用体类型

  1. union:用于定义一种特殊的数据类型,可以在相同的内存位置存储不同的数据类型。

2.5C++变量定义

变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。

变量定义指定一个数据类型,并包含一个或多个变量的列表。

如:

int i, j, k;

变量可以在声明的时候被初始化。等号后跟一个常量表达式。

不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL,其他所有变量的初始值是未定义的。

2.6C++中的变量声明

变量声明向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。

当使用多个文件且只在其中一个文件中定义变量时,变量声明就显得非常有用。可以使用 extern 关键字在任何地方声明一个变量。虽然可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。

2.7C++中的左值和右值

C++ 中有两种类型的表达式:

  1. 左值:指向内存位置的表达式被称为左值表达式。左值可以出现在赋值号的左边或右边。
  2. 右值:右值指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。

2.8C++变量作用域

一般来说有三个地方可以定义变量:

  1. 在函数或一个代码块内部声明的变量,称为局部变量。
  2. 在函数参数的定义中声明的变量,称为形式参数。
  3. 在所有函数外部声明的变量,称为全局变量。

作用域是程序的一个区域,变量的作用域可以分为以下几种:

  1. 局部作用域:在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。局部变量在函数每次被调用时被创建,在函数执行完后被销毁。
  2. 全局作用域:在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。全局变量在程序开始时被创建,在程序结束时被销毁。
  3. 块作用域:在代码块内部声明的变量具有块作用域,它们只能在代码块内部访问。块作用域变量在代码块每次被执行时被创建,在代码块执行完后被销毁。
  4. 类作用域:在类内部声明的变量具有类作用域,它们可以被类的所有成员函数访问。类作用域变量的生命周期与类的生命周期相同。

注:如果在内部作用域中声明的变量与外部作用域中的变量同名,则内部作用域中的变量将覆盖外部作用域中的变量。

2.8.1.1局部变量

在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。

2.8.1.2全局变量

在所有函数外部定义的变量称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。

全局变量可以被任何函数访问,即全局变量一旦声明,在整个程序中都是可用的。

2.8.1.3初始化局部变量和全局变量

局部变量被定义时,系统不会对其初始化,必须自行初始化。 定义全局变量时,系统会自动初始化为下列值:

数据类型

初始化默认值

int

0

char

'\0'

float

0

double

0

pointer

NULL

2.8.2.1块作用域

块作用域指的是在代码块内部声明的变量的作用域。

2.8.2.2类作用域

类作用域指的是在类内部声明的变量的作用域。

2.9C++常量

常量是固定值,在程序执行期间不会改变。又叫做字面量。

常量可以是任何的基本数据类型。

常量的值在定义后不能进行修改。

2.9.1.1整数常量

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

2.9.1.2浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成。可以使用小数形式或者指数形式来表示浮点常量。

当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时,必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。

2.9.1.3布尔常量

布尔常量共有两个。

  1. true值代表真。
  2. false值代表假。

2.9.1.4字符常量

字符常量是括在单引号中的。

字符常量可以是一个普通的字符(例如 ‘x’)、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')。

一些转义序列码:

转义序列

含义

\\

\ 字符

\'

' 字符

\"

" 字符

\?

? 字符

\a

警报铃声

\b

退格键

\f

换页符

\n

换行符

\r

回车

\t

水平制表符

\v

垂直制表符

\ooo

一到三位的八进制数

\xhh . . .

一个或多个数字的十六进制数

2.9.1.5字符串常量

字符串字面值或常量是括在双引号""中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。

可以使用\做分隔符,把一个很长的字符串常量进行分行。如:

“hello,\

world”

2.9.2定义常量

在 C++ 中,有两种简单的定义常量的方式:

  1. 使用#define预处理器。
  2. 使用const关键字。

2.9.3#define预处理器

形式:

#define identifier value

如:

#define PI 3.14

2.9.4const关键字

形式:

const type variable = value;

如:

const int HEIGHT=180;

2.10C++修饰符类型

C++ 允许在char、int和 double数据类型前放置修饰符。

2.10.1.1signed

表示变量可以存储负数。对于整型变量来说,signed 可以省略,因为整型变量默认为有符号类型。

2.10.1.2unsigned

表示变量不能存储负数。对于整型变量来说,unsigned 可以将变量范围扩大一倍。

2.10.1.3short

表示变量的范围比 int 更小。short int 可以缩写为 short。

2.10.1.4long

表示变量的范围比 int 更大。long int 可以缩写为 long。

2.10.1.5long long

表示变量的范围比 long 更大。

2.10.1.6float

表示单精度浮点数。

2.10.1.7double

表示双精度浮点数。

2.10.1.8bool

表示布尔类型,只有 true 和 false 两个值。

2.10.1.9char

表示字符类型。

2.10.1.10wchar_t

表示宽字符类型,可以存储 Unicode 字符。

注:修饰符signed、unsigned、long 和 short可应用于整型,signed和unsigned可应用于字符型,long可应用于双精度型。

这些修饰符也可以组合使用。如:unsigned long int。

C++ 允许使用速记符号来声明无符号短整数或无符号长整数。即可以不写int,只写单词unsigned、short或long。

2.10.2C++中的类型限定符

类型限定符提供了变量的额外信息,用于在定义变量或函数时改变它们的默认行为的关键字。

限定符

含义

const

const定义常量,表示该变量的值不能被修改。

volatile

修饰符volatile告诉该变量的值可能会被程序以外的因素改变,如硬件或其他线程。

restrict

由restrict修饰的指针是唯一一种访问它所指向的对象的方式。

mutable

表示类中的成员变量可以在 const 成员函数中被修改。

static

用于定义静态变量,表示该变量的作用域仅限于当前文件或当前函数内,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kethy__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值