提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
C++是一种功能强大、灵活的编程语言,广泛应用于系统软件、应用软件、设备驱动、嵌入式软件、高性能服务器和客户端应用程序、游戏引擎等。
一、C和C++的区别
C 和 C++ 是两种广泛使用的编程语言,它们之间有许多区别。C++ 是在 C 的基础上发展而来的,增加了许多新特性和功能。以下是 C 和 C++ 之间的一些主要区别:
- 面向对象编程
C:是面向过程的编程语言,主要通过函数和过程进行编程。
C++:是面向对象的编程语言,支持类和对象。C++ 中的面向对象特性包括封装、继承和多态性。 - 数据抽象和封装
C:没有直接支持数据抽象和封装的语言特性,程序员需要通过结构体和函数进行模拟。
C++:引入了类和对象,通过访问控制符(public、private、protected)实现数据抽象和封装。 - 继承
C:不支持继承,无法通过一个类继承另一个类的属性和方法。
C++:支持继承,可以通过基类和派生类的关系重用代码。 - 多态性
C:不支持多态性,函数重载和运算符重载也不支持。
C++:支持多态性,包括函数重载和运算符重载,以及通过虚函数实现的动态多态性。 - 标准库
C:C 标准库提供了有限的函数,如 stdio.h、stdlib.h 等。
C++:C++ 标准库不仅包含 C 标准库的所有功能,还增加了如 STL(标准模板库),包括容器、迭代器和算法等。 - 内存管理
C:内存管理主要通过 malloc、calloc 和 free 等函数进行。
C++:内存管理可以通过 new 和 delete 操作符进行,此外还支持智能指针(如 std::unique_ptr 和 std::shared_ptr)来自动管理内存。 - 输入输出
C:使用标准的输入输出库函数,如 printf 和 scanf。
C++:使用更高级的 I/O 流库,如 cin 和 cout,支持类型安全和操作符重载。 - 函数和参数
C:函数参数不能有默认值。
C++:函数参数可以有默认值,支持更灵活的函数调用。 - 命名空间
C:没有命名空间,所有标识符共享一个全局命名空间,容易发生命名冲突。
C++:引入了命名空间,通过 namespace 关键字定义命名空间,避免命名冲突。 - 模板
C:不支持模板。
C++:支持模板,可以编写泛型代码,进行代码复用,如模板函数和模板类。 - 异常处理
C:不支持异常处理,错误处理通常通过返回值和错误代码进行。
C++:支持异常处理,通过 try、catch 和 throw 关键字处理异常。 - 兼容性
C:是 C++ 的子集,大部分 C 代码可以在 C++ 编译器下编译,但并非所有 C++ 代码都能在 C 编译器下编译。
C++:可以包含 C 代码并进行编译,但需要注意一些语法和特性的区别。
二、C++的灵魂——类
类(Class)可以被称为这门语言的“灵魂”,因为它不仅是面向对象编程(OOP)的核心,也是实现代码重用、模块化和抽象的关键。我们可以把类看作是c语言中结构体的升级版,它可以既可以包含变量,也可以包含函数(我们再leecode刷的题就是在进行类的编写)。
这里可以打个比方说明一下什么是类,比如有一条小狗,小狗有名字叫旺财,旺财的年龄是 2 岁,同时旺财会汪汪的叫,也能跑。我们统称狗这个为类,类是我们抽象出来的,因为狗不只有上面的属性,还有体重,毛发的颜色等等,我们只抽象出几种属性成一个类,而具体到哪条狗就叫对象。
2.1 类的定义与成员
类是用户自定义的数据类型,由数据成员(attributes)和函数成员(methods)组成。类用于指定对象的形式,它包含了数据表示法和用
于处理数据的方法。
类的定义包括类的名称、数据成员以及成员函数的声明与定义。C++中的类有三种访问控制方式:public、protected和private。这决定了类的成员在类外部的可访问性。
- public:所有成员可以在类外部直接访问。
- private:成员只能在类内部访问,类的外部不能直接访问这些成员。默认情况下,类的成员是private。
- protected:成员只能在类内部或派生类中访问,但不能在类的外部直接访问。
在C++中,类的成员可以分为几种不同的类型,每种类型都有其独特的用途和特性。了解这些成员类型有助于更灵活地设计和实现类。
- 数据成员(Data Members)是类中定义的变量,用于存储类对象的状态或属性。根据访问控制级别,它们可以是公有、私有或受保护的。
- 实例数据成员:这些是为每个对象单独存储的变量。每个对象都有自己的一份数据成员的副本。
- 静态数据成员:静态数据成员在所有对象之间共享,属于整个类而非某个对象。它们在类的定义中声明,并在类外部定义和初始化。
- 成员函数(Member Functions)是操作类对象的函数。根据