泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客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

达到预期

UML类图详解_泛化关系的更多相关文章

  1. UML类图详解_关联关系_一对多

    对于一对多的示例,可以想象一个账户可以多次申购.在申购的时候没有固定上限,下限为0,那么就可以使用容器类(container class)来搞,最常见的就是vector了. 下面我们来看一个“一对多” ...

  2. UML类图详解_关联关系_多对一

    首先先来明确一个概念,即多重性.什么是多重性呢?多重性是指两个对象之间的链接数目,表示法是“下限...上限”,最小数据为零(0),最大数目为没有设限(*),如果仅标示一个数目级上下限相同. 实际在UM ...

  3. UML类图详解_组合关系

    组合关系和聚合关系有一个最大的不同,组合关系中的整体直接掌握部件的生灭,聚合关系中的整体并不具有生灭部件的权力.一旦组合中的整体不存在时,其组合部件也不能单独存在,必须同时消灭.另外,外界也不能直接与 ...

  4. UML类图详解_聚合关系

    结合UML关系,以看台和基金来介绍聚合关系 aggregation,是一种特殊的关联关系,既有关联关系的特质,还独有“整体 —— 部分(whole —— part)”的特质. 也就是说,用之前的关联关 ...

  5. UML类图详解_关联关系_多对多

    在关联关系中,很多情况下我们的多重性并不是多对一或者一对多的,而是多对多的. 不过因为我们要考虑里面的导航性,如果直接搞的话就是需要去维护两群对象之间多对多的互指链接,这就十分繁杂且易错.那么我们怎么 ...

  6. UML类图详解

    下面是类图的实例: (注:飞翔接口那里应为空心三角形) UML中类图实例 接口:空心圆+直线(唐老鸭类实现了‘讲人话’):依赖:虚线+箭头(动物和空气的关系):关联:实线+箭头(企鹅需要知道气候才迁移 ...

  7. UML 类图详解

    转载来源:http://blog.csdn.net/shift_wwx/article/details/79205187 可以参考:http://www.uml.org.cn/oobject/2012 ...

  8. UML类图详解和示例

    ps:博客园markdown不能自动生成列表,更好的阅读体验可访问我的个人博客http://www.isspark.com/archives/UMLDescription UML类图概述 什么是UML ...

  9. UML简单介绍—类图详解

    类图详解 阅读本文前请先阅读:UML简单介绍—类图这么看就懂了 1.泛化关系 一个动物类: /** * 动物类 */ public class Animal { public String name; ...

随机推荐

  1. [BZOJ 1912] patrol 巡逻

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1912 Algorithm: K=0:res=(n-1)*2   每条边恰好走2遍 K=1 ...

  2. 【pb_ds】bzoj1056 [HAOI2008]排名系统/bzoj1862 [Zjoi2006]GameZ游戏排名系统

    STL裸题,线下AC,bzoj无限RE ing…… #include<cstdio> #include<cctype> #include<iostream> #in ...

  3. java源码阅读Object

    1 类注释 Class {@code Object} is the root of the class hierarchy. Every class has {@code Object} as a s ...

  4. 1.1(学习笔记)JSP(Java Server Pages)基础(脚本元素、指令元素)

    一.JSP简介 JSP全称为Java Server Pages,是一种动态网页开发技术,可以在HTML界面中嵌入java代码, 实现动态的提供数据.访问JSP时服务器会将JSP翻译成Servlet,访 ...

  5. 5.1 java类集(java学习笔记)Collection、List接口及ArrayList、LinkedList类。

    一.类集 类集就是一组动态的对象数组,说类集可能不好理解,类集又称容器,容器顾名思义就是放东西的地方. 类集就是为了让我们更加简洁,方便的存放.修改.使用数据的. 二.Collection接口 我们看 ...

  6. nodejs全局变量设置设置

    编辑 ~/.npmrc 加入下面内容 prefix = D:\tool\nodejs\node_global cache = D:\tool\nodejs\node_cache registry = ...

  7. git强行推送到远端

    回到某一个节点git reset --hard 5db4eddeca2然后把现在这个节点,强行推送到远端git push -f origin master

  8. Android Studio 生成aar包,并非debug包,而是release包

    1.编写Module,作为library 下面是需要发布的aar包,上面的是随意的project 2.app依赖myLibrary 2.1 设置Project Structure 2.2 app依赖M ...

  9. SSL和TSL的区别【转】

    SSL由从前的网景公司开发有1,2,3三个版本,但现在只使用版本3 TLS是SSL的标准化后的产物 有1.0 1.1 1.2三个版本 默认使用1.0 TLS1.0和SSL3.0几乎没有区别 事实上我们 ...

  10. 【java】File的使用:将字符串写出到本地文件,大小0kb的原因

    实现方法: 暂时写一种方法,将字符串写出到本地文件,以后可以补充更多种方法: public static void main(String[] args) { /** * ============== ...