封装是面向对象编程(OOP)中的一个关键原则,它源于将数据与处理这些数据的函数进行分组的需要,并将实现细节隐藏于用户之外。
自OOP出现以来,封装旨在提高程序的可靠性,减少错误,并提高代码的维护方便性。在C++中,通过数据隐藏和提供与对象交互的接口来实现它。
没有封装,类的内部数据和实现细节可以从程序的任何部分被修改。这导致错误、修改的复杂性和代码的可管理性差。
C++中的封装通过类中的访问修饰符(private,protected,public)来实现。类的内部数据使用private或protected声明,而通过公开的方法(获取器和设置器)来访问它们。
代码示例:
class Account { private: double balance; public: Account(double initial) : balance(initial) {} double getBalance() const { return balance; } void deposit(double amount) { if (amount > 0) balance += amount; } };
关键特性:
protected成员能否在程序的任何地方通过类的对象访问?
不,protected成员仅在类自身的方法、朋友和派生类中可访问,但不能从其他类或外部对象访问。
类的public成员可以被认为是"封装的吗"?
不,public成员不被封装,其任务是提供外部接口。有时过于开放的public成员会违反封装原则。
private修饰符在运行时是否增加了代码的安全性?
不,访问修饰符仅在编译器级别工作,并不能防止在可执行文件中访问数据——但可以限制设计错误。
开发人员将类的所有变量都设为public以"简化业务逻辑"。
优点:
缺点:
数据声明为private,通过带有必要验证的getter/setter进行交互。
优点:
缺点: