面向对象的三特征和五原则:
- 三个基本特征:封装(与封装相关的关键字:private)、继承(与继承相关的关键字:interface)、多态(与多态相关的关键字:virtual)
- 五种设计原则:单一职责原则、开放封闭原则、Liskov(里氏代换)原则、依赖倒置原则、接口隔离原则、良性依赖原则
封装可以隐藏实现细节,使得代码模块化
继承可以扩展已存在的代码模块
封装和继承的目的都是为了实现代码重用
多态的目的是为了实现接口重用
具体的解释可以参照博客:http://blog.csdn.net/cancan8538/article/details/8057095
博主写的很详细~
MFC类库将CObject的析构函数设为virtual的原因:
- 析构函数调用顺序与构造函数相反
- 但由于多态的存在,如果有如下代码,则指针p撤销时,被调用的是CBase的析构函数,导致CChild占据的内存不会释放,造成内存泄漏
CBase *p; CChild c; p = &c;
- 如果将CObject类的析构函数设为virtual,则其派生类的析构函数均为virtual型,从而解决了在某些情况下出现的内存泄漏问题
重载只是一种语言特性,与多态无关,与面向对象也无关