21xrx.com
2024-12-22 16:38:49 Sunday
登录
文章检索 我的文章 写文章
《C++核心编程》笔记(Markdown格式)
2023-06-28 08:23:18 深夜i     --     --
C++ 核心编程 笔记 Markdown格式

C++核心编程是一本经典的C++编程入门教材,它由C++之父Bjarne Stroustrup所著,融合了其多年的C++编程经验和教学经验。本篇文章将分享一些学习C++核心编程时的笔记,主要采用Markdown格式。

## 第一章 C++基础

### 头文件

头文件是C++程序中一个非常重要的概念。头文件通常包含函数声明、宏定义和类型声明等内容。在程序中使用头文件时,需要使用编译器提供的预处理器将头文件中的内容插入到程序中。常用的头文件有:

- `iostream`:输入输出流

- `cstdio`:文件输入输出

- `cstdlib`:字符串转换、内存管理和随机数生成

- `cmath`:数学函数库

- `ctime`:时间函数库

### 命名空间

命名空间在C++中用来防止名称冲突,其作用类似于文件夹。C++标准库中所有的函数和对象都在`std`命名空间中。使用命名空间的方法如下:


using namespace std; // 使用std命名空间中的所有内容

using std::cout; // 使用std命名空间中的cout函数

### 函数模板

函数模板在C++中用来生成通用的函数定义,其形式如下:


template <typename T>

T max(T a, T b) {

  return a > b ? a : b;

}

### 类模板

类模板与函数模板类似,不同之处在于其定义的是通用的类类型。类模板的定义形式如下:


template <typename T>

class Array {

private:

  T data[SIZE];

public:

  // ...

};

## 第二章 基本数据类型

C++中的基本数据类型包括整型、浮点型、字符型和布尔型等。在使用这些数据类型时需要注意其数据范围和精度限制。

### 整型

C++中整型的定义有`short`、`int`、`long`、`long long`等。其数据范围和长度依次增大,但是精度有限制。需要注意的是,不同的编译器在确定整型数据范围和长度时可能存在差异。

### 浮点型

C++中浮点型的定义包括`float`和`double`两种,其精度分别为6位小数和15-16位小数。需要注意的是,浮点型数据在比较时存在舍入误差,不能直接使用相等运算符比较。

### 字符型

C++中字符型的定义使用单引号括起来的单个字符,其ASCII码范围为0~127。需要注意的是,字符型变量的实质是整型数据,可以进行算术运算、赋值和比较等操作。

### 布尔型

C++中布尔型的定义使用`bool`类型,其取值为`true`和`false`。布尔类型的变量在进行比较运算时会自动转换为整型类型(0表示`false`,1表示`true`)。

## 第三章 字符串和库类型

C++标准库中包含了许多常用的数据类型和算法实现,可以大大简化编程过程。

### 字符串

C++中字符串的定义可以使用字符数组或`string`类型。字符数组的使用方法比较原始,`string`类型的使用方法更为清晰和方便。`string`类型的常用操作包括:

- 字符串长度和容量:`length()`和`capacity()`

- 字符串插入和删除:`insert()`和`erase()`

- 字符串替换和查找:`replace()`和`find()`

### 容器类型

C++中容器类型用来存储一组数据,包括向量、链表、集合和映射等。这些数据类型使用方便、高效,并且可以实现许多常用的算法和数据结构。常用的容器类型包括:

- 向量(`vector`):具有动态扩展能力的连续存储的线性表。

- 链表(`list`):具有动态扩展能力的离散存储的线性表。

- 集合(`set`):具有自动排序和去重功能的容器。

- 映射(`map`):具有键值对关系的容器,支持快速插入、删除和查找等操作。

### 算法库

C++中算法库包含了许多常用算法的实现,可以大大简化编程过程。常用的算法包括:

- 排序:`sort()`、`stable_sort()`、`partial_sort()`等

- 唯一性:`unique()`、`unique_copy()`等

- 查找:`find()`、`lower_bound()`、`upper_bound()`等

- 数值:`accumulate()`、`inner_product()`、`partial_sum()`等

## 第四章 函数和参数

C++中函数是实现算法和逻辑的基础,其参数传递方式包括值传递、指针传递和引用传递等。

### 值传递

值传递是指将函数参数的值复制一份,传递给函数内部进行操作。值传递相对简单,但是会产生额外的内存开销,并且函数无法修改原始参数的值。值传递的函数定义如下:


int add(int a, int b) {

  return a + b;

}

### 指针传递

指针传递是指将参数的地址传递给函数,通过指针访问函数参数的值。指针传递可以实现修改函数参数的值,但是需要注意指针的空指针和野指针问题。指针传递的函数定义如下:


void swap(int *a, int *b) {

  int temp = *a;

  *a = *b;

  *b = temp;

}

### 引用传递

引用传递是指将参数的引用传递给函数,通过引用访问函数参数的值。引用传递可以实现修改函数参数的值,且无需使用指针,更加优雅和方便。引用传递的函数定义如下:


void swap(int &a, int &b)

  int temp = *a;

  *a = *b;

  *b = temp;

## 第五章 类和对象

C++中类和对象是实现面向对象编程的基础,其特点包括封装、继承和多态等。

### 类的定义和对象的创建

C++中类的定义包括属性和方法的定义,属性可以是公共的、私有的或受保护的。对象的创建可以使用`new`关键字动态分配内存,也可以直接使用栈空间。


class Person {

private:

  int age;

  string name;

public:

  void sayHello() " << age << " years old." << endl;

  

};

int main() {

  Person person;

  person.sayHello();

  return 0;

}

### 构造函数和析构函数

类中的构造函数和析构函数用来实现对象的初始化和清理工作。默认的构造函数和析构函数可以自动实现,也可以手动定义。构造函数使用特殊的方法名,析构函数在类名前加上`~`符号。


class Person {

public:

  Person(int age, string name)

    this->age = age;

    this->name = name;

  

  ~Person()

    cout << "Person is destructed." << endl;

  

  void sayHello()

    cout << "Hello

private:

  int age;

  string name;

};

int main() {

  Person person(20, "Tom");

  person.sayHello();

  return 0;

}

### 继承和多态

C++中的继承和多态是实现面向对象编程的重要特性。继承用来实现代码复用和类的层次结构,分为公有继承、私有继承和受保护继承等。多态用来实现基类和派生类之间的关系,包括虚函数和抽象类等。


class Animal {

public:

  virtual void sayHello()

    cout << "I'm an animal." << endl;

  

};

class Cat : public Animal {

public:

  void sayHello() override

    cout << "I'm a cat." << endl;

  

};

class Dog : public Animal {

public:

  void sayHello() override

    cout << "I'm a dog." << endl;

  

};

int main() {

  Animal *animal;

  Cat cat;

  Dog dog;

  animal = &cat;

  animal->sayHello();

  animal = &dog;

  animal->sayHello();

  return 0;

}

## 总结

本篇文章介绍了C++核心编程的一些基本知识和笔记,包括头文件、命名空间、函数模板、类模板、基本数据类型、字符串和库类型、参数传递、类和对象、继承和多态等。掌握这些知识可以帮助我们更好地理解和使用C++编程,欢迎大家深入学习和实践。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复