泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客UML类图重新来实现一次。

依旧是这个图

下面我们来看一个例子

Account.h

 #include <cstdlib>
#include <vector>
#include "Bid.h"
using namespace std; class Account
{
public:
void setBid(Bid*);
int calcAsset();
private:
vector<Bid*> bidObj;
};

Account.cpp

 #include "Account.h"

 void Account::setBid(Bid *theBid)
{
bidObj.push_back(theBid);
} int Account::calcAsset()
{
int size,theAsset=;
size=bidObj.size();
for(int i=;i<size;i++)
theAsset=theAsset+bidObj[i]->calcAsset();
return theAsset;
}

Bid.h

 #include "Fund.h" 

 class Bid
{
public:
void setFund(Fund*);
virtual int calcAsset()=;
virtual float getUnit()=;
protected:
Fund *fundObj;
};

Bid.cpp

 #include "Bid.h"

 void Bid::setFund(Fund *theFund)
{
fundObj=theFund;
}

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;
}

SingleBid.h

 class SingleBid : public Bid
{
public:
SingleBid(float);
int calcAsset();
float getUnit();
private:
float unit;
};

SingleBid.cpp

 #include "SingleBid.h"

 SingleBid::SingleBid(float theUnit)
{
unit=theUnit;
} int SingleBid::calcAsset()
{
return unit*fundObj->getPrice();
} float SingleBid::getUnit()
{
return unit;
}

RegularBid.h

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

RegularBid.cpp

 #include "RegularBid.h"

 RegularBid::RegularBid()
{
BidItem *myItem;
myItem=new BidItem(59.53);
itemObj.push_back(myItem);
myItem=new BidItem(89.85);
itemObj.push_back(myItem);
myItem=new BidItem(91.45);
itemObj.push_back(myItem);
} float RegularBid::getUnit()
{
int size;
float theUnit=;
size=itemObj.size();
for(int i=;i<size;i++)
theUnit=theUnit+itemObj[i]->getUnit();
return theUnit;
} int RegularBid::calcAsset()
{
return getUnit()*fundObj->getPrice();
}

BidItem.h

 class BidItem
{
public:
BidItem(float);
float getUnit();
private:
float unit;
};

BidItem.cpp

 #include "BidItem.h"

 BidItem::BidItem(float theUnit)
{
unit=theUnit;
} float BidItem::getUnit()
{
return unit;
}

main.cpp

 // main.cpp
// #include <cstdlib>
#include <iostream>
#include "SingleBid.h"
#include "RegularBid.h"
#include "Account.h"
#include "Fund.h"
using namespace std; int main(int argc, char *argv[])
{
Fund *myFund;
SingleBid *mySingleBid;
RegularBid *myRegularBid;
Account myAccount; myFund=new Fund(19.84);
mySingleBid=new SingleBid(935.76);
mySingleBid->setFund(myFund);
myAccount.setBid(mySingleBid);
cout << "大华大华基金单位及净值: "
<< "(" << mySingleBid->getUnit() << ")"
<< "(" << myFund->getPrice() << ")" << endl; myFund=new Fund(37.83);
mySingleBid=new SingleBid(721.45);
mySingleBid->setFund(myFund);
myAccount.setBid(mySingleBid);
cout << "日盛上选基金单位及净值: "
<< "(" << mySingleBid->getUnit() << ")"
<< "(" << myFund->getPrice() << ")" << endl; myFund=new Fund(49.61);
myRegularBid=new RegularBid();
myRegularBid->setFund(myFund);
myAccount.setBid(myRegularBid);
cout << "富邦长虹基金单位及净值: "
<< "(" << myRegularBid->getUnit() << ")"
<< "(" << myFund->getPrice() << ")" << endl << endl; cout << "总资产为: "
<< myAccount.calcAsset() << endl << endl; system("PAUSE");
return EXIT_SUCCESS;
}

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

生成代码对比

Account.h

达到预期

Bid.h

达到预期
Fund.h

达到预期

SingleBid.h

达到预期

RegularBid.h

达到预期

BidItem.h

达到预期

最新文章

  1. BZOJ 1861: [Zjoi2006]Book 书架
  2. 关于word excel 等的信息隐藏技术
  3. 深入理解 Win32 PE 文件格式
  4. [Leetcode] Permutation Sequence
  5. PHP获取日期
  6. Phonegap hello world 不容易啊~!
  7. poptest老李谈数据结构中深度优先和广度优先
  8. Spring(三)--AOP【面向切面编程】、通知类型及使用、切入点表达式
  9. 修改量更新API
  10. Linux网络文件系统的实现与调试
  11. acm
  12. [引]ionic framework 相关网站
  13. jenkins权限配置
  14. JAVA程序测试时用到的与内存测试有关的东西
  15. 【洛谷 P3705】 [SDOI2017]新生舞会(费用流,01分数规划)
  16. export、exports、modules.exports 和 require 、import 的一些组合套路和坑
  17. 关于调整TimePicker, DatePicker的大小,样式
  18. firefox 插件 取消认证签名
  19. Ubuntu 安装QT5 后编译程序报错: FindQt5Widgets.cmake
  20. [leetcode-738-Monotone Increasing Digits]

热门文章

  1. Find the Difference -- LeetCode
  2. CodeChef - UASEQ Chef and sequence
  3. [SRM570]TheTiles
  4. 【带修莫队】【权值分块】bzoj3196 Tyvj 1730 二逼平衡树
  5. 【矩阵哈希】【哈希表】bzoj2351 [BeiJing2011]Matrix
  6. Exercise02_03
  7. iOS开发-设置在使用NavigateController时View的顶部位置
  8. 学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础
  9. 解决Windows服务修改配置文件后必须重启的问题
  10. system表空间爆满解决方法