封装是面向对象设计的原则,意味着隐藏对象的内部结构,并仅提供必要的公共接口。
问题历史: 自面向对象编程出现以来,保护对象的内部状态不被外部错误修改以及确保逻辑严格控制成为关键任务之一。
问题: 没有封装,所有数据和方法都对外部代码可用,这会导致失去对对象状态的控制,并产生难以追踪的错误。
解决方案:
C++使用三种访问修饰符:private、protected、public。private禁止在类外部访问成员,protected仅允许子类访问,public使成员成为接口的一部分。
代码示例:
class Stack { private: int *data; int top; public: Stack(); void push(int val); int pop(); };
关键特性:
private成员真的无法在类外部以任何方式更改吗?
不对。可以使用friend函数、friend类或不安全的手法(例如,通过类型转换指针或通过未定义行为)。
继承时修饰符的应用顺序是什么(private、protected、public)?
如果继承声明为private,所有基类的public和protected成员都会变成派生类的private成员。
protected和private继承有什么区别?
在protected继承中,所有基类的public和protected成员变为派生类的protected成员;在private继承中,所有成员都变为private。
类的所有成员都声明为public,任何外部代码都可以修改结构并破坏对象的不变性。
优点:
缺点:
仅使用必要的公共方法,其余数据被封闭(private),状态得到保护。
优点:
缺点: