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

下面我们来看一个“一对多”的例子

Account.h

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

声明一个存放申购交易对于指针的vector对象。然后类Account中的函数setBid设计了一个公有操作,让外界用来传入申购交易对象的指针,以便让账户对象将申购交易对象指针存入vector对象中。

Account.cpp

 #include "Account.h"

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

Bid.h

 class Bid
{
public:
void setAmount(int);
int getAmount();
private:
int amount;
};

Bid.cpp

 #include "Bid.h"

 void Bid::setAmount(int theAmount)
{
amount=theAmount;
} int Bid::getAmount()
{
return amount;
}

main.cpp

 #include <cstdlib>
#include <iostream>
#include "Bid.h"
#include "Account.h"
using namespace std; int main(int argc, char *argv[])
{
Bid *myBid;
Account myAccount;
int theAmount;
int choice; do
{
cout << "请输入申购金额: ";
cin >> theAmount;
myBid=new Bid;
myBid->setAmount(theAmount);
myAccount.setBid(myBid);
cout << "1(继续), 2(结算) ...";
cin >> choice;
cout << endl;
} while(choice==); cout << "总投资金额为: "
<< myAccount.calcAmount() << endl << endl; system("PAUSE");
return EXIT_SUCCESS;
}

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

画法一:

生成代码对比

Account.h

没有达到预期,多生成了成员变量,如果在类图里面写明了某个指针变量的话,那么在关联关系的端点处就不能再标示这个成员变量了,否则就会重复生成

UML类图详解_关联关系_多对一中的画法二,也是因为这个导致了没有达到预期

Bid.h

达到预期

画法二:

生成代码对比

Account.h

达到预期

Bid.h

达到预期

画法三:

生成代码对比

Account.h

没有达到预期

Bid.h

达到预期

综上所述,在实际画图的时候采用画法二才能保证正确,一旦类图里面包含了一次成员那么在关联端点再声明一次的话就会重复,另外如果不在类图里面包含一次成员而在关联端点处声明一次的话生成的代码比较傻,很多情况下无法满足我们的要求。所以我们就是把成员都在类图里面包含进去,关联端点处就是声明一下多重性,而不要再声明成员就可以了。

UML类图详解_关联关系_一对多的更多相关文章

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

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

  2. UML类图详解_泛化关系

    泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客UML类图重新来实现一次. 依旧是这个图 下面我们来看一个例子 Account.h #include <cstdlib> ...

  3. UML类图详解

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

  4. UML 类图详解

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

  5. UML类图详解和示例

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

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

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

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

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

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

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

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

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

随机推荐

  1. Codechef REBXOR

    Read problems statements in Mandarin and Russian. Translations in Vietnamese to be uploaded soon. Ni ...

  2. 3.3常用类(java学习笔记)Runtime与Process

    一.Runtime 我们来看下文档中对Runtime的说明: 每一个java程序都有一个属于Runtime类的实例,它允许程序连接到程序运行环境. 当前runtime可以用getRuntime()方法 ...

  3. [Hybrid App]--Android混合开发,Android、Js的交互

    AndroidJs通信 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...

  4. 109.关路灯(区间dp)

    1258 关路灯  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 多瑞卡得到了一份有趣而高薪的工作.每 ...

  5. 关于MYsql 多字段排序

    SELECT switch_data.* , lan_data.ename FROM switch_data , lan_data WHERE switch_data.address = '佳合丽景' ...

  6. TOleDBMSSQLConnectionProperties驱动MSSQL数据库

    TOleDBMSSQLConnectionProperties驱动MSSQL数据库 为了让MORMOT可以驱动所有版本的MSSQL,需要改用SQLOLEDB,因为所有的WINDOWS操作系统里面都提供 ...

  7. 【FTP】java FTPClient 文件上传内容为空,文件大小为0

    问题:如题所述,使用FTPClient上传至FTP服务器, 表现如下:①文件大小为0 ②上传很小的文件,但是要花费很长的时间,20K要花费2分钟甚至更久 ③没有任何的报错,没有任何的乱码 解决方法: ...

  8. 自己做的javascript简易计算器

    html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...

  9. [干货]2017已来,最全面试总结——这些Android面试题你一定需要

        地址.http://blog.csdn.net/xhmj12/article/details/54730883 相关阅读: 吊炸天!74款APP完整源码! [干货精品,值得收藏]超全的一线互联 ...

  10. C/C++ Windows移植到Linux

    近期写了有关Socket的程序,需要从windows移植到linux.现把有用的东东收集整理记录下来. 1.头文件windows下winsock.h或winsock2.h:linux下netinet/ ...