OO的片段

摘自C++编程思想:

------------------------------ 继承与组合:接口的重用
-------------------------------

继承和组合都允许由已存在的类型创建新类型,两者都是在新类型中嵌入已存在的类型的子对象。然而,当我们想重用原类型作为新类型的内部实现的话,我们最好用组合,如果我们不仅想重用这个内部实现而且还想重用原来接口的话那就用继承。如果派生类有基类的接口,它就能向上映射到这个基类,这一点对多态性很重要。

虽然通过组合和继承进行代码重用对于快速项目开发有帮助,但通常我们会希望在允许其他程序员依据它开发程序之前重新设计类层次。我们的类层次必须有这样的特性:它的每个类有专门的用途,不能太大(包含太多的功能不利于重用),也不能太小(太小如不对它本身增加功能就不能使用)。而且这些类应当容易重用。

------------------------------ 继承的优点与目的
-------------------------------

继承的优点之一是它支持渐增式开发,它允许我们在已存在的代码中引进新代码,而不会给原代码带来错误,即使产生了错误,这个错误也只与新代码有关。也就是说当我们继承已存在的功能类并对其增加数据成员和成员函数(并重定义已存在的成员函数)时,已存在类的代码并不会被改变,更不会产生错误。如果错误出现,我们就会知道它肯定是在我们的新派生代码中。相对于修改已存在代码体的做法来说,这些新代码很短也很容易读。

认识到程序开发是一个渐增过程,就象人的学习过程一样,这是很重要的。我们能做尽可能多的分析,但当开始一个项目时,我们仍不可能知道所有的答案。如果开始把项目作为一个有机的、可进化的生物来“培养”,而不是完全一次性的构造它,使之像一个玻璃盒子式的摩天大楼,那么我们就会获得更大的成功和更直接的反馈。

虽然继承对于实验是有用的技术,但在事情稳定之后,我们需要用新眼光重新审视一下我们的类层次,把它看成可感知的结构。记住,继承首先表示一种关系,其意为:“新类是老类的一个类型。”

------------------------------ 虚机制在构造函数中不工作
-------------------------------

虚机制在构造函数中不工作。这个行为有两个理由。在概念上,构造函数的工作是把对象变成存在物。在任何构造函数中,对象可能只是部分被形成—我们只能知道基类已被初始化了,但不知道哪个类是从这个基类继承来的。另外,许多编译器认识到,如果在构造函数中进行虚函数调用,应该使用早捆绑,因为它们知道晚捆绑将只对本地函数产生调用。无论哪种情况,在构造函数中调用虚函数都没有结果。

OO的片段,布布扣,bubuko.com

时间: 2024-12-14 20:35:01

OO的片段的相关文章

OO真经——关于面向对象的哲学体系及科学体系的探讨(上)

http://www.cnblogs.com/leoo2sk/archive/2009/04/09/1432103.html 目录 Catelog 序言 Perface 真经第一章:世界 Waltanschauung 真经第二章:抽象 Abstraction 真经第三章:层次 Arrangement 真经第四章:继承 Inheritance 真经第五章:耦合 Couple 真经第六章:运作 Moving 真经第七章:建造 Build 真经第八章:刻画 Delineate 真经第九章:模式 Pat

OO方式下,ALV TREE和ALV GRID的不同之处

ALV TREE和ALV GRID的实现整体上是相似的,但也有一些不同之处,现总结如下 首先定义概念:文中的ALV GRID指的是由OO方式建立的.由类cl_gui_alv_grid实例化后产生的ALV GRID,而ALV TREE指的是由类cl_gui_alv_tree实例化后产生的ALV TREE 1,输出内容的构建方式 ALV GRID的输出数据是通过直接将查询结果内表作为参数传递到ALV GRID对象的 set_table_for_first_display方法而显示的.   在ALV

latex在vim中的代码片段

Gilles Castel写的vim中使用的代码片段,质量很高,原文:https://github.com/gillescastel 下载后,存放到 ~/.vim/plugged/ultisnips/UltiSnips 下面是记录一下,该代码片段: global !p texMathZones = ['texMathZone'+x for x in ['A', 'AS', 'B', 'BS', 'C', 'CS', 'D', 'DS', 'E', 'ES', 'F', 'FS', 'G', 'G

solr分布式索引【实战一、分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例】

1 private static Properties prop = new Properties(); 2 3 private static String confFilePath = "conf" + File.separator + "config.properties";// 配置文件目录 4 static { 5 // 加载properties 6 InputStream is = null; 7 InputStreamReader isr = null;

100个直接可以拿来用的JavaScript实用功能代码片段

把平时网站上常用的一些实用功能代码片段通通收集起来,方面网友们学习使用,利用好的话可以加快网友们的开发速度,提高工作效率. 目录如下: 1.原生JavaScript实现字符串长度截取2.原生JavaScript获取域名主机3.原生JavaScript清除空格4.原生JavaScript替换全部5.原生JavaScript转义html标签6.原生JavaScript还原html标签7.原生JavaScript时间日期格式转换8.原生JavaScript判断是否为数字类型9.原生JavaScript

关于UITabBar各部分自定义的代码片段

一.自定义TabBar选项卡背景默认UITabBarController的TabBar背景是黑色的,如何自定义成背景图片呢? UITabBarController *tabBarController = [[UITabBarController alloc] init]; // 获取选项卡控制器视图的所有子视图,保存到一数组中 NSArray *array = [tabBarController.view subviews]; // 索引值为1的应该就是TabBar UITabBar  *tab

jquey学习2之jquery动态添加页面片段

第一个方法:append()方法 [1]$(selector).append(content)//向匹配的所有标签中的内容末尾处添加Html代码,会编译成页面显示. 1 <html> 2 <head> 3 <script type="text/javascript" src="/jquery/jquery.js"></script> 4 <script type="text/javascript&quo

OO (VS) SO

继续上一篇博文<SOA--面向服务的体系架构>,这次主要向大家阐述面向对象和面向服务的关系,请大家多提宝贵意见! OO(ObjectOriented,面向对象),用一张图表示OO进行系统开发的特性: SO(Service-Oriented,面向服务),用一张图表示SO系统开发与运行的特性: 通过这两图的对比,如果抽象一点来说的话,这两张图其实都是一样的,运用同一种思想:通过某种形式,关联颗粒.如果用微观和宏观来说,OO是微观的,SO是宏观的.不追求细节的话,可以说,两者都是抽象出具体形式(对象

常用python日期、日志、获取内容循环的代码片段

近段时间对shell脚本和python进行了梳理,将一些脚本中常用的内容,考虑多种方法整理出来,形成有用的代码片段,这样就可以在需要的时候直接使用,也可以用于备忘和思考.本次整理的代码片段有: python中日期.时间常用获取方法: 记录处理日志的logging模块使用:从目录,文件,命名结果中,获取循环条件进行循环.我将这些有用的代码片段整理在一个Python脚本中了,并且测试可用.脚本内容如下: #!/usr/bin/env python #_*_coding:utf8_*_ #常用日期和时