组合关系和聚合关系有一个最大的不同,组合关系中的整体直接掌握部件的生灭,聚合关系中的整体并不具有生灭部件的权力。一旦组合中的整体不存在时,其组合部件也不能单独存在,必须同时消灭。另外,外界也不能直接与部件沟通,必须通过整体代为传达消息。那么在C++中实现组合关系时,不能由第三者产生部件后才将部件指标传给整体,而是应该由整体直接负责部件的生灭。

有了定期定额申购之后,每个月的约定日到达就会自动产生一笔定额交易,也就是单期交易。那么定期定额申购与单期交易非常适合使用组合关系,一旦某笔定期定额申购被删除,底下的单期交易也就不该再继续存留。

下面我们来看一个“组合关系”的例子

Fund.h

 class Fund
{
public:
Fund(float);
float getPrice();
private:
float price;
};

Fund.cpp

 #include "Fund.h"

 Fund::Fund(float thePrice)
{
price=thePrice;
} float Fund::getPrice()
{
return price;
}

RegularBid.h

 #include <cstdlib>
#include <vector>
#include "BidItem.h"
using namespace std; class RegularBid
{
public:
void createBidItem(float,Fund*);
int calcAsset();
private:
vector<BidItem*> itemObj;
};

RegularBid.cpp

 #include "RegularBid.h"

 void RegularBid::createBidItem(float theUnit,Fund *theFund)
{
BidItem *myItem=new BidItem(theUnit);
myItem->setFund(theFund);
itemObj.push_back(myItem);
} int RegularBid::calcAsset()
{
int size,theAsset=;
size=itemObj.size();
for(int i=;i<size;i++)
theAsset=theAsset+itemObj[i]->calcAsset();
return theAsset;
}

BidItem.h

 #include "Fund.h" 

 class BidItem
{
public:
BidItem(float);
void setFund(Fund*);
int calcAsset();
float getUnit();
private:
float unit;
Fund *fundObj;
};

BidItem.cpp

 #include "BidItem.h"

 BidItem::BidItem(float theUnit)
{
unit=theUnit;
} void BidItem::setFund(Fund *theFund)
{
fundObj=theFund;
} int BidItem::calcAsset()
{
return unit*fundObj->getPrice();
} float BidItem::getUnit()
{
return unit;
}

main.cpp

 #include <cstdlib>
#include <iostream>
#include "RegularBid.h"
#include "Fund.h"
using namespace std; int main(int argc, char *argv[])
{
Fund *myFund=new Fund(37.83);
RegularBid myRegularBid; myRegularBid.createBidItem(590.53,myFund);
myRegularBid.createBidItem(890.85,myFund);
myRegularBid.createBidItem(901.45,myFund); cout << "总资产为: "
<< myRegularBid.calcAsset() << endl << endl; system("PAUSE");
return EXIT_SUCCESS;
}

下面我们来画一下UML图,并且用UML自动生成C++代码来做一个比较

生成代码对比

Fund.h

达到预期

RegularBid.h

达到预期

BidItem.h

达到预期

画组合关系的时候,也是一样,一旦类图里面包含了一次成员那么在组合端点再声明一次的话就会重复,另外如果不在类图里面包含一次成员而在组合端点处声明一次的话生成的代码比较傻,很多情况下无法满足我们的要求。所以我们就是把成员都在类图里面包含进去,组合端点处就是声明一下多重性,而不要再声明成员就可以了。

最新文章

  1. js变量及其作用域(附例子及讲解)
  2. HTML5 挖宝
  3. Java Main Differences between Java and C++
  4. 消息队列MQ
  5. 编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异
  6. EventLoop的设计
  7. JQUERY1.9学习笔记 之层级选择器(四)
  8. [转]标准C++字符串string以及MFC6.0字符串CString的tokenize和split函数
  9. 使用Vs2005打造简单分页浏览器(1)原创
  10. salesforce 零基础学习(六十四)页面初始化时实现DML操作
  11. html学习第二弹の表格的使用方法
  12. p-value
  13. 经典的java中return和finally问题!
  14. Access Treeview树节点代码二
  15. Redis哈希表总结
  16. Wannafly summer camp Day6 - D 区间权值
  17. python爬虫之Beautiful Soup的基本使用
  18. robotframework中RIDE的下载及安装
  19. LeetCode(65):有效数字
  20. LOJ-10106(有向图欧拉回路的判断)

热门文章

  1. POJ 3246 Game(凸包)
  2. python3-开发进阶Django-debug-toolbar的配置和Django logging的配置
  3. React Native 让组件做到局部刷新
  4. 【记录一下】phpMyAdmin 4.5.0-beta1 发布,要求 PHP 5.5
  5. nginx+lua+redis
  6. postgres访问认证配置文件pg_hba.conf
  7. 【JAVA】StringTokenizer 迭代方式对字符串进行分割
  8. Python 转义html中以&quot;&amp;#&quot;开头的字符
  9. 【转】es6的拓展运算符 spread ...
  10. 转:facebook 开源工具集合