c++管理对象之间动态的多重连接

本文探讨如何在C++中优雅地管理动态的多重关联关系,以教务管理软件为例,涉及课程、学生和社团的多对多动态关联。通过有效的方法,实现根据对象快速查找相关联的对象,并在删除对象时自动清理关联列表,确保数据一致性。文中以QT容器为例,但方法适用于所有C++程序。
摘要由CSDN通过智能技术生成

接触c++一年了.进入了一个无论如何写代码都觉得不够优雅的阶段.最近研究了一下UML帮助自己为稍微复杂些的需求建模.UML中用的最多的怕是关联关系了.复杂的模型中,很有可能动态产生和删除对象,对象之间动态的产生/删除多重关联关系.

例如教务管理软件.
需要管理课程,学生,社团.
课程,社团和学生之间的关系都是多对多的动态关联.

那么使用什么方法能方便快捷的管理这些动态的对象?
比如不仅能高效的根据学生找他的课程和社团,还能根据社团和课程找学生.甚至能方便的实现统计那个社团的学生更喜欢哪门选修课.
任何一个对象删除,都能自动的删除该对象关联对象的关联列表中的自己.


最然我的例子是用QT容器,但是只要将容器做个替换就可以用在所有c++程序中了.

link.h

#ifndef LINK_H
#define LINK_H

#include <QMap>
#include <QList>
#include <typeinfo>

class Link
{
public:
    void addLink(Link* item);
    void removeLink(Link* item);
    template <class FriendType> QList<FriendType*> find()
    {
        return *((QList<FriendType*>*)(&(links_[this][&typeid(FriendType)])));
    }

protected:
    Link(const std::type_info* type);
    //只能通过继承此类来使用关联.type是子类的类型.
    ~Link();

private:
    std::type_info const* type_;
    //记录子类的的类型
    static QMap<Link*, QMap<std::type_info const*, QList<Link*> > > links_;
    /*管理了所有对象的关系表
        map<对象索引, 对象的所有关系>
                     map<有关系的类型的索引, 以类型分组后的关系对象>
    */
};

#endif // LINK_H

link.cpp

#include "link.h"

QMap<Link*, QMap<std::type_info const*, QList<Link*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值