C++ 面向对象四大特性:面试深度解析
前言
面向对象编程(Object-Oriented Programming, OOP)是 C++ 的核心。在技术面试中,对 OOP 四大基本特性——封装 (Encapsulation)、继承 (Inheritance)、多态 (Polymorphism) 和 抽象 (Abstraction) 的理解和运用是必考点。本篇文档旨在帮助你系统、清晰地掌握这些概念,并能用代码自如地向面试官展示你的理解。
1. 封装 (Encapsulation)
核心定义
封装是将数据(属性)和操作这些数据的方法(函数)捆绑到一个独立的单元(即 类 (Class))中。同时,它通过控制访问权限(public
, private
, protected
)来隐藏对象的内部实现细节,只对外暴露必要的接口。
面试官想听到什么: 封装的核心是“捆绑”和“隐藏”。它不仅是把数据和方法放在一起,更重要的是保护数据,防止外部代码随意篡改,保证了数据的安全性和完整性。
为什么需要封装?
-
安全性 (Security): 隐藏内部数据,防止非法访问和修改。
-
模块化 (Modularity): 将复杂的系统分解为一个个独立的、可管理的类,降低了系统的复杂度。
-
灵活性 (Flexibility): 类的内部实现可以随时修改,只要对外暴露的公共接口不变,就不会影响到其他使用该类的代码。
代码示例
在这个例子中,BankAccount
类封装了 accountNumber
和 balance
。外部代码无法直接访问 balance
,只能通过 deposit
和 withdraw
这两个公共接口来安全地操作余额。
#include <iostream>
#include <string>// BankAccount 类将账户数据和操作封装在一起
class BankAccount {
private:// 数据成员被设为私有,外部无法直接访问std::string accountNumber;double balance;public:// 构造函数,用于初始化对象BankAccount(std::string num, double initialBalance) {accountNumber = num;// 保证初始余额是有效的if (initialBalance >= 0) {balance = initialBalance;} else {balance = 0.0;}}// 公共成员函数(接口),用于与外部交互void deposit(double amount) {if (amount > 0) {balance += amount;std::cout << "存款成功. 当前余额: " << balance << std::endl;