1. 简述C++与C语言的区别?
C++和C语言在设计理念、语法特征、应用场景等都有其各自的特征。
核心定位 理念设计
- C语言的核心定位是面向过程的结构编程语言,C++支持多凡事混合汇编语言(C++的核心定位是面向对象)
- C语言以过程为核心,通过函数实现每个步骤,强调代码的高效性和硬件操控能力,追求"轻量、简洁";C++是在C语言的基础上以"对象"为核心,将数据(属性)和操作(方式)封装在一起,强调代码的复用性、可维护性、扩展性同时保留对硬件的直接操控能力。
编程范式支持:
C语言是面向过程,代码重复依赖函数封装或宏定义,但是在大型项目当中就容易出现"代码冗余、耦合度高"的问题。
C++是面向对象对象编程包括封装、继承、多态
其中封装是通过类进行封装在一起、通过public/private/protected
控制访问权限,避免数据被随意修改。
继承主要是子类可以继承父类的属性和方法,减少代买的冗余量。
多态就是同一接口(如父类的虚函数)在不同子类中可实现不同逻辑
**内存管理方式:
二者均支持手动内存管理,但 C++ 新增了更便捷、安全的方式:
-
C 语言:仅依赖标准库函数
动态内存分配 / 释放需通过
malloc()、calloc()、realloc()
分配内存,free()
释放内存,且需手动计算内存大小(如int* p = (int*)malloc(10 * sizeof(int))
),易出现 "内存泄漏"(忘记free()
)或 "野指针"(释放后未置空)。 -
C++ 语言:兼容 C 的函数,同时新增 "运算符"
动态内存分配用 new 运算符(如
int* p = new int[10]
),释放用 delete 运算符(如delete[] p
);new/delete
会自动调用对象的构造函数 / 析构函数(初始化 / 清理资源),而malloc()/free()
仅操作内存,不处理对象生命周期,更安全。
应用场景不同
C语言对执行效率、占用内存要求极高,需要直接操控的场景,比如:操作系统内核(Linux内核)、嵌入式开发(如单片机程序)、驱动程序、底层工具(如编译器前段)
C++需要复杂逻辑、高可维护性,同时兼容效率大的中大型项目,比如游戏开发、服务器开发桌面应用等。
总之C语言适合底层、高效、简单的应用场景,核心是过程;
C++是在兼容C的高效的基础之上同时实现面向对象、泛型等特性支持复杂项目,核心是对象和复用。
2.什么是面向对象的编程思想
面相对象编程简称OOP,全称object oriented programming。就是以对象为核心的编程思想,它将现实世界中的事物抽象为程序中的"对象",通过对象之间的交互来解决问题。核心及时将数据(属性)和操作数据的行为(方法)封装在一起,强调从"现实世界的实体"出发设计程序,而非单纯按照步骤(面向过程)解决问题。
面向对象四大核心特征
封装
封装主要指的是将对象属性(数据)和方法(操作)捆绑在一起,将他们形成一个独立的类(Class) 隐藏内部实现细节,只能通过公开的开口实现与外部的交互。这样可以保护数据提高数据的安全性,降低代码耦合度。
继承
继承主要发生在父子类当中
当一个类继承了另一个类的属性和方法时就成继承的类为子类,被继承的类为父类。子类可以在父类的基础上扩展新的功能或者重新写父类的方法。这样的特点可以减少代码冗余,实现代码复用和层级关系。
多态
同一操作作用到不同的对象时,可能产生不同的执行结果。泽阳的使用提高了代码的灵活性和扩展性,符合"开闭原则"(对扩展开放,对修改关闭)
抽象
忽略次要细节,提炼事物的核心特性,形成抽象的"类"或"接口",这样简化复杂系统,聚焦核心逻辑
面向对象编程的优势
- **贴合现实思维:**通过"对象"映射实现事物,代码更易理解维护。
- **适合大型项目:**模块化的设计使多人协作更高效,后期的维护扩展也更方便。
- **代码复用性高:**通过继承和组合减少代码的重复
- **安全性更高:**封装的机制保护内部数据,降低误操作的风险。
C++的面向对象的三大特征都是什么?每种特征的主要作用是什么?
C++面向对象的三大特征:封装、继承、多态。
封装:
将对象的属性和方法捆绑在一个类当中,通过方案控制符(public/private/protected)限制外部对内部数据直接访问,仅暴露不要的接口与外部交互。
主要作用:
- 数据保护:通过
private
隐藏内部的细节,繁殖外部代码随意的修改数据,避免数据被误操作。 - 降低耦合:外部只需要通过类的
public
方法与对象交互无须关心内部逻辑,当类的内部实现修改时,外部代码无须变动。 - 模块化:每个类成为一个独立的功能模块化,便于代码的组织和多协作开发。
继承:
允许一个类(子类/派生类)继承另一个类(父类/基类)的属性和方法,子类可以在此基础上增加自己是属性和方法。或者重写父类的方法。
主要作用:
- 代码复用:子类无需编写父类已有的功能,直接继承并复用,减少代码的冗余。
- 构建层级关系:通过继承的体现现实世界中的关系,使类的设计更符合现实逻辑
- 扩展便捷性:在父类基础上扩展新功能不影响父类及其他子类的实现。
多态:
同一操作作用域不同对象,会产生不同的执行结果。C++主要通过虚函数和指针/引用的动态绑定实现。
- 接口统一:使用父类指针/引用调用方法时,无需区分具体子类类型,统一接口即可适配不同实现。
- 扩展性强:新增子类,无需修改现有的代码,只需要实现喜神的方法,符合开不原则
- 灵活性高:运行是根据对象实际类型动态选择的方法,使程序逻辑更灵活