GeekBand 随笔分享(三)

//..................................................................................  专题一  ...........................................................................................................

一、composition:

首先,我一句简单的话去理解:

1》 composition:是将一个对象(部分)放到另一个对象里(组合)。它是一种 has-a 的关系。组合使软件在开发过程中可以聚合已存在的组件而不用去新建一个。

2》 多层composition可以嵌套,生命周期同单层组合一样,整个对象周期。

代码例:

 class A{
    ...
    protected:
    B a; //A中有B
  } class B{    C c; } class C{    ... }

3》composition的构造与析构过程:

构造过程:  先构造类内部其他类的构造函数,再构造自已的构造函数。这点在实际编程中也很有帮助,特别是大型项目里头。

A::B(...): B(){...};

析构过程:先调用类里其他类的析构函数,再调用自身的析构函数。

 A::~A(...) {...~A()};

4》生命周期: 随对象的存在而存在,消失而消失。

二、Delegation:

1》 Delegation:利用对象指针方法,实时调用其他类的各种方法。

2》 基本用法:

在一个类中,使用指针,调用其他类的方法。

3》生命周期:

随指针调用创建而存在,消失而消失。

4》扩展:

多目标Delegation,起始就是一个容器,在这个容器里可以存放多个对象,当调用委托的时候一次调用每个对象。容器里的对象应该都是相同的类型,这样才能够放到强             类型的容器中;而且Delegation调用方不应该知道具体的调用目标是什么,所以这些对象也应该要隐藏具体的细节。

三、Inheritance:

解释:

One of the most important concepts in object-oriented programming is that of inheritance. Inheritance allows us to define a class in terms of another class, which makes it easier to create and maintain an application. This also provides an opportunity to reuse the code functionality and fast implementation time.

When creating a class, instead of writing completely new data members and member functions, the programmer can designate that the new class should inherit the members of an existing class. This existing class is called the baseclass, and the new class is referred to as the derived class.

其实,Inheritance,在面象对象囫开发多领域中,得到强大的应用,特别是与虚函数的巧妙应用,是经典用法!

代码例子:

// Base class
class Shape
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// Derived class
class Rectangle: public Shape
{
   public:
      int getArea()
      {
         return (width * height);
      }
};

//----------------------------------------------------------------------------- 专题二 ----------------------------------------------------------------------------------------------------------------------------

一、虚函数与纯虚函数:
1、虚函数:那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象    的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。

方法:virtual ReturnType FunctionName(Parameter);

2、纯虚函数:

那些被virtual关键字修饰的成员函数,就是虚函数, 后面赋值为0.

方法:virtual ReturnType Function()= 0;

代码实现例子:

include<iostream>
using namespace std;
class CDocument{
    pulic:
    void OnFileOpen()
    {
       //----
       Serialize();
       //----
    }
    virtual void Serialize(){};
}
class CMyDoc :public CDocument{
   public:
         virtual void Serialize(){
            cout<<"CMyDoc :: Serialize()"
           }
}

//----------------------------------------------------------------------------- 专题三 ----------------------------------------------------------------------------------------------------------------------------

几个经典设计模式:

1、delegation + inheritance(这个组合是最强大的)

2、Compsite

3、Prototype

时间: 2024-08-17 05:12:44

GeekBand 随笔分享(三)的相关文章

GeekBand 随笔分享(一)

学习中带着快乐与探索,学习下,在这里记下美好的技术要点,心得总结: 一.大气的编程方法 在设计模式中, 编程设计等领域中,规范设计,编程技术规范非常的重要. 二.C++中引用 C++引用,与C中的Pointer 有差很大的本质联系与区分. 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 三. 友元函数      优点:能够提高效率,表达简单.清晰.      缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数. 四.操作符重载 oper

新随笔(三)什么时候使用按钮,什么时候使用文字链接

新随笔(三)什么时候使用按钮,什么时候使用文字链接 你为什么在这个地方用按钮而不用文字链接呢? 这是刚才我问一个设计师的问题. 她抬头看我,眼神迷茫,说:“没什么为什么呀,我就觉得放在这儿显眼呗...“ 估计她心里想这问的什么蠢问题呀,我就是凭直觉呗. 哈,偏偏我是一个认真的人,喜欢较真,相信世间万物均有其规则. (也许是做过媒体的缘故,我对放在页面上的东西非常敏感,要求设计师必须告诉我,为什么放这个元素在这儿,为什么不放另一个,会起到什么实际作用) 刚才,我仔细的向她说了一下我的看法. 题外话

开源分享三(炫酷的Android Loading动画)

开源分享三(炫酷的Android Loading动画) 分享GitHub上的一些Loading,为了提升产品用户体验,一个好的Loading必然是不可缺少的,对于一些耗时需要用户等待的页面来说会转移用户注意力,不会显得那么烦躁,所以你可以看到市面上一些App中的各种各样的Loading动画,从这些实现思路上可以打开你们自己的思维,没准也会有创新的Loading动画出现. android-shapeLoadingView 新版58同城加载页面动画. CircleProgress 一个效果很酷炫很创

自了法师全集 | 无量寿经科注第四回学习班分享三十篇

释自了法师 净土指归 1月28日 南无阿弥陀佛 欢迎点击上方关注“净土指归” 自了法师 无量寿经科注第四回学习班分享三十篇全集 目录 生死心不切,若真为生死之心不发,一切开示皆为戏论 凡修净业,以决志求生西方为本 佛一边念,生死爱根一边长 重新认识净土法门 时时作临终想 念佛法门,首为凡夫 常念不绝,则得道捷 日暮途远 摄耳谛听 历代祖师示真信切愿 是心是佛,是心作佛 印光大师述<无量寿经>缘起 都摄六根,净念相继 欲报亲恩唯念佛 ——浅谈祭祖最重要的内涵 不信佛.不信佛力 ——从占察忏现象引

QCustomplot使用分享(三) 图

一.可以实现的图 相对于其他绘制图表的第三方库来说,QCustomPlot算是比较轻量的,不仅仅能实现功能,而且二次开发比较容易.下面我们来具体说下他可以实现那些图 QCPGraph:折线图,LineStyle枚举可以设置折线图绘制的风格,主要区别是两点间连线的方式,常规的方式就是直连,其他还有L型.Z型等,如图1所示,都是折线图,只是设置了不同的折线参数:QCPScatterStyle枚举用于设置节点类型,包括:圆形.三角形等,如图2所示. QCPBars:柱状图,如图3所示 QCPFinan

项目分享三:页面之间的传值

一.回调函数的使用 我们首先来看一下,页面间传值的一个经典例子,列表页与明细页之间的传值,如下面二张图所图.在列表页点击评价晒单,进入评价晒单页面,当用户在该页面完成操作后,列表页对应的选项,相应地改为“已评价".那么这个是怎么实现的呢?在这个案例里面,使用的是 回调函数 ,我们来看一下相关的代码. 下面这段代码,是列表页的代码,当用户点击”评价晒单“按钮时,打开评价晒单详细页.关键点在于 evaluatePage['submited'] 这个回调函数. evaluate = (item) =&

Android:Umeng(友盟) 微信,QQ,新浪分享 (三)

第一步: 下载并安装SDK 添加代码和资源引用,我们提供了添加资源文件和jar文件的两种方式,可以根据需求选择 解压SDK压缩包,将文件夹中的'main/libs'和'main/res'文件夹复制到你的项目工程根目录下(如使用'ADT 17'以下用户需要手动添加'libs'下的jar文件到工程Path中) 结合上两篇文章 PushSDKMoudle中添加QQ,微信,新浪分享后的libs结构: 注:除jar包外,其余文件夹均需添加对应分享的so包.没有则不添加,附图: 第二步: AndroidMa

墨客原型系统——随笔分享APP

一.设计背景 每天人们都会遇见各种事情,产生各种体验,但如今很少有人会携带笔和纸,而这些转瞬即逝的感受却会很快流逝,所以我想设计一个APP让人们库随时记录和分享自己每天的生活点滴与感悟. 二.运行平台  Ios,Android 三.功能简介 1.我设置了登录.注册界面,每个人注册自己的帐号. 2.登陆后,就有笔记分类列表. 3.随便点击一个笔记种类,就会进入该种类详细的笔记列表. 4.用户在笔记列表中选择自己喜欢的笔记点击即可观看笔记内容. 5.点击笔记中的用户名出现博主的个人介绍,用户可以点击

分享 - 三个稳定的微信域名检测API接口

微信域名检测接口是腾讯官方对外公布的域名查询api,请求api接口可实时查询域名在微信中的状态信息.如果状态异常则返回结果提示“域名被封”,如果未有异常则返回结果提示“域名正常”. 微信域名检测接口 格式一:http://www.60ht.cn/wxcheck/api.php?url=http://www.baidu.com 格式二:http://www.xiaocaoff.cn/api/check.php?url=http://www.baidu.com 格式三:http://www.dxch