1. 从零理解C++封装与继承
面向对象编程(OOP)是现代软件开发的核心范式,而C++作为OOP的代表语言,其三大特性——封装、继承和多态构成了构建健壮软件系统的基石。作为从业十余年的C++开发者,我见过太多因滥用语言特性导致的维护噩梦,也深刻体会到正确运用这些特性的价值。本文将用实际工程案例带你深入理解前两大特性。
提示:本文所有代码示例均通过GCC 12.2编译测试,建议读者在Linux环境下使用-std=c++20标准编译验证
1.1 封装:数据安全的守护者
封装不是简单的"把数据包起来",而是建立严谨的访问控制体系。我在金融系统开发中曾遇到一个典型案例:某银行系统因直接暴露账户余额字段,导致并发修改引发资金异常。正确的封装应该像这样:
cpp复制class SecureAccount {
private:
std::string accountId_;
double balance_;
mutable std::mutex mtx_; // C++17引入的共享锁
public:
explicit SecureAccount(std::string id)
: accountId_(std::move(id)), balance_(0) {}
bool transfer(double amount, SecureAccount& recipient) {
std::scoped_lock lock(mtx_, recipient.mtx_); // 避免死锁
if (amount <= 0 || balance_ < amount)
return false;
balance_ -= amount;
recipient.balance_ += amount;
return true;
}
double getBalance() const {
std::lock_guard lock(mtx_);
return balance_;
}
};
