现在的位置: 首页 > 综合 > 正文

C++面向对象程序设计

2018年02月19日 ⁄ 综合 ⁄ 共 1442字 ⁄ 字号 评论关闭

基本概念

面向对象程序设计:以对象为中心,将数据和方法封装在一起。

三要素:抽象继承 多态

五个基本原则:

单一职责原则:就一个类而言,应该有且仅有一个引起它变化的原因。

开放-封闭原则:是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。

里氏替换换原则:子类应当可以替换父类并出现在父类能够出现的任何地方。

依赖倒置原则:高层模块不应该依赖低层模块。两个都应该依赖抽象。抽象不应该依赖细节。细节应该依赖抽象。

接口隔离原则:采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。

http://www.cnblogs.com/systemxgl/archive/2010/07/29/1787924.html

C++虚函数表

虚函数与虚函数表基本知识

陈浩的C++ 虚函数表解析:http://blog.csdn.net/haoel/article/details/1948051

编译器编译一个拥有虚函数的类时,都会额外申请一块内存存储虚函数表virtual table,虚函数表存储所有虚函数地址。类实例化为对象时,在对象存储区某个位置存储一个vptr指针,vptr指针指向虚函数表表起始地址。这个指针具体放在什么位置,虚函数表怎么组织,怎么索引各个虚函数,这些都是编译器在编译期间决定的,在不同编译环境下可能不相同。

多态子类构造函数的调用顺序-- 为什么不要在构造函数中调用虚函数

原因是,在子类的构造函数执行时,虚函数表还没有被子类覆盖,换句话说,此时调用的函数是当前类的函数,虚函数机制在构造函数中无法触发。其原因在于子类构造时各个初始化步骤的调用顺序:

全部推演过程见此:http://saturnman.blog.163.com/blog/static/557611201081421344244/

直接摘录构造顺序:

1.构造子类构造函数的参数

2.子类调用基类构造函数

3.基类设置vptr

4.基类初始化列表内容进行构造

5. 基类函数体调用

6. 子类设置vptr

7. 子类初始化列表内容进行构造

8. 子类构造函数体调用

(注意一点,初始化列表内的数据不按书写顺序,而是按类内部的定义顺序)

析构的顺序恰好相反,所以也不要在析构函数中调用虚函数,那样也是没有意义的。

为什么构造函数不能是虚函数

从设计理念上说,构造函数不需要是虚函数;从当前vptr的实现机制上说,无法实现虚的构造函数。

详细可见这里:http://blog.csdn.net/livelylittlefish/article/details/2198514

多重继承与虚继承

http://www.cnblogs.com/ForFreeDom/archive/2012/08/19/2646754.html

设计模式

在VCL应用中运用MVC模式http://blog.csdn.net/raptor/article/details/1747979

从MVC架构到C++的多态实现http://blog.csdn.net/historyasamirror/article/details/5025061

MVC模式已死?何不试试MOVEhttp://www.36kr.com/p/126957.html 

用C++进行设计模式解析和实现http://c.chinaitlab.com/special/sjms/Index.html

设计模式C++实现http://blog.csdn.net/column/details/design.html

抱歉!评论已关闭.