c++ 1对多关系类,原创注明元元,否则会打击原创者的信心啊
2014-08-02 16:02
183 查看
#pragma once
#include <memory>
#include <list>
#include <algorithm>
class N_class{
public:
friend struct finder_N_class;
//friend class relation_class;
const CString& get_value(void)const
{
return m_TBLName;
}
N_class& operator =(const N_class& N_obj)
{
m_TBLName=N_obj.m_TBLName;
return *this;
}
N_class(const N_class& N_obj)
{
m_TBLName=N_obj.m_TBLName;
};
N_class(const CString& TBName)
{
m_TBLName=TBName;
};
private:
CString m_TBLName;
};
typedef struct finder_N_class
{
finder_N_class(const std::shared_ptr<N_class>& N_obj)
{
m_N_obj=N_obj;
}
bool operator()(std::shared_ptr<N_class> p)
{
return (m_N_obj->m_TBLName == p->m_TBLName);
}
std::shared_ptr<N_class> m_N_obj;
}finder_N_class;
class One_class
{
public:
int iOtherTaxerCount;//没有计划好的成员,去掉并不影响这个类的功能
friend struct finder_relation_One_class;
//friend class relation_class;
One_class& operator =(const One_class& One_obj)
{
m_TBLName=One_obj.m_TBLName;
return *this;
}
One_class(const One_class& One_obj)
{
m_TBLName=One_obj.m_TBLName;
};
const CString& get_value(void)const
{
return m_TBLName;
}
One_class(const CString& TBName)
{
m_TBLName=TBName;
};
private:
CString m_TBLName;
};
class relation_class
{
public:
friend class _c_1_TO_N_relation;
friend struct finder_relation_One_class;
const std::shared_ptr<One_class>& getOne(void)const
{
return m_one;
}
private:
std::list<std::shared_ptr<N_class>> m_Ns;
std::shared_ptr<One_class> m_one;
};
typedef struct finder_relation_One_class
{
finder_relation_One_class(const std::shared_ptr<One_class>& One_obj)
{
m_TBLName=One_obj->m_TBLName;
}
bool operator()(std::shared_ptr<relation_class>p)
{
return (m_TBLName == p->m_one->m_TBLName);
}
CString m_TBLName;
}finder_One_class;
class _c_1_TO_N_relation
{
public:
int getRelationsSize(void)const
{
return m_relations.size();
}
const std::list<std::shared_ptr<relation_class>>& getRelation(void)const
{
return m_relations;
}
const std::shared_ptr<One_class>& getOne(const std::shared_ptr<N_class> N_obj) const;
const std::list<std::shared_ptr<N_class>>& getNs(const std::shared_ptr<One_class>& One_obj) const;
BOOL addRelation(const std::shared_ptr<One_class> One_obj, const std::shared_ptr<N_class> N_obj);
_c_1_TO_N_relation(void);
~_c_1_TO_N_relation(void);
private:
static const std::list<std::shared_ptr<N_class>> retNULLList;
static const std::shared_ptr<One_class> retNULL;
std::list<std::shared_ptr<relation_class>> m_relations;
};
#include "StdAfx.h"
#include "_c_1_TO_N_relation.h"
const std::list<std::shared_ptr<N_class>> _c_1_TO_N_relation::retNULLList=(std::list<std::shared_ptr<N_class>>)NULL;
const std::shared_ptr<One_class> _c_1_TO_N_relation::retNULL=NULL;
_c_1_TO_N_relation::_c_1_TO_N_relation(void)
{
}
_c_1_TO_N_relation::~_c_1_TO_N_relation(void)
{
}
BOOL _c_1_TO_N_relation::addRelation(const std::shared_ptr<One_class> One_obj,
const std::shared_ptr<N_class> N_obj)
{
try{
std::list<std::shared_ptr<relation_class>>::iterator iter=
std::find_if(m_relations.begin(),m_relations.end(),finder_relation_One_class(One_obj));
if(iter!=m_relations.end())
{
std::list<std::shared_ptr<N_class>>::iterator iter_N=
std::find_if((*iter)->m_Ns.begin(),(*iter)->m_Ns.end(),finder_N_class(N_obj));
if(iter_N!=(*iter)->m_Ns.end())
{
return FALSE;
}
else
{
(*iter)->m_Ns.push_back(N_obj);
return TRUE;
}
}
else
{
std::shared_ptr<relation_class> relation(new relation_class);
relation->m_one=One_obj;
relation->m_Ns.push_back(N_obj);
m_relations.push_back(relation);
return TRUE;
}
}catch(...)
{
return FALSE;
}
}
const std::shared_ptr<One_class>& _c_1_TO_N_relation::getOne(const std::shared_ptr<N_class> N_obj)const
{
for(std::list<std::shared_ptr<relation_class>>::const_iterator iter=m_relations.begin();
iter!=m_relations.end();++iter)
{
for(std::list<std::shared_ptr<N_class>>::iterator iter_N=(*iter)->m_Ns.begin();
iter_N!=(*iter)->m_Ns.end();++iter_N)
{
if((*iter_N)->get_value()==N_obj->get_value())
{
return (*iter)->m_one;
}
}
}
return retNULL;//这里需要改
}
const std::list<std::shared_ptr<N_class>>& _c_1_TO_N_relation::getNs(
const std::shared_ptr<One_class>& One_obj)const
{
for(std::list<std::shared_ptr<relation_class>>::const_iterator iter=m_relations.begin();
iter!=m_relations.end();++iter)
{
if((*iter)->m_one->get_value()==One_obj->get_value())
{
return (*iter)->m_Ns;
}
}
return retNULLList;
}
#pragma once
#include <memory>
#include <list>
#include <algorithm>
class N_class{
public:
friend struct finder_N_class;
//friend class relation_class;
const CString& get_value(void)const
{
return m_TBLName;
}
N_class& operator =(const N_class& N_obj)
{
m_TBLName=N_obj.m_TBLName;
return *this;
}
N_class(const N_class& N_obj)
{
m_TBLName=N_obj.m_TBLName;
};
N_class(const CString& TBName)
{
m_TBLName=TBName;
};
private:
CString m_TBLName;
};
typedef struct finder_N_class
{
finder_N_class(const std::shared_ptr<N_class>& N_obj)
{
m_N_obj=N_obj;
}
bool operator()(std::shared_ptr<N_class> p)
{
return (m_N_obj->m_TBLName == p->m_TBLName);
}
std::shared_ptr<N_class> m_N_obj;
}finder_N_class;
class One_class
{
public:
int iOtherTaxerCount;//没有计划好的成员,去掉并不影响这个类的功能
friend struct finder_relation_One_class;
//friend class relation_class;
One_class& operator =(const One_class& One_obj)
{
m_TBLName=One_obj.m_TBLName;
return *this;
}
One_class(const One_class& One_obj)
{
m_TBLName=One_obj.m_TBLName;
};
const CString& get_value(void)const
{
return m_TBLName;
}
One_class(const CString& TBName)
{
m_TBLName=TBName;
};
private:
CString m_TBLName;
};
class relation_class
{
public:
friend class _c_1_TO_N_relation;
friend struct finder_relation_One_class;
const std::shared_ptr<One_class>& getOne(void)const
{
return m_one;
}
private:
std::list<std::shared_ptr<N_class>> m_Ns;
std::shared_ptr<One_class> m_one;
};
typedef struct finder_relation_One_class
{
finder_relation_One_class(const std::shared_ptr<One_class>& One_obj)
{
m_TBLName=One_obj->m_TBLName;
}
bool operator()(std::shared_ptr<relation_class>p)
{
return (m_TBLName == p->m_one->m_TBLName);
}
CString m_TBLName;
}finder_One_class;
class _c_1_TO_N_relation
{
public:
int getRelationsSize(void)const
{
return m_relations.size();
}
const std::list<std::shared_ptr<relation_class>>& getRelation(void)const
{
return m_relations;
}
const std::shared_ptr<One_class>& getOne(const std::shared_ptr<N_class> N_obj) const;
const std::list<std::shared_ptr<N_class>>& getNs(const std::shared_ptr<One_class>& One_obj) const;
BOOL addRelation(const std::shared_ptr<One_class> One_obj, const std::shared_ptr<N_class> N_obj);
_c_1_TO_N_relation(void);
~_c_1_TO_N_relation(void);
private:
static const std::list<std::shared_ptr<N_class>> retNULLList;
static const std::shared_ptr<One_class> retNULL;
std::list<std::shared_ptr<relation_class>> m_relations;
};
#include "StdAfx.h"
#include "_c_1_TO_N_relation.h"
const std::list<std::shared_ptr<N_class>> _c_1_TO_N_relation::retNULLList=(std::list<std::shared_ptr<N_class>>)NULL;
const std::shared_ptr<One_class> _c_1_TO_N_relation::retNULL=NULL;
_c_1_TO_N_relation::_c_1_TO_N_relation(void)
{
}
_c_1_TO_N_relation::~_c_1_TO_N_relation(void)
{
}
BOOL _c_1_TO_N_relation::addRelation(const std::shared_ptr<One_class> One_obj,
const std::shared_ptr<N_class> N_obj)
{
try{
std::list<std::shared_ptr<relation_class>>::iterator iter=
std::find_if(m_relations.begin(),m_relations.end(),finder_relation_One_class(One_obj));
if(iter!=m_relations.end())
{
std::list<std::shared_ptr<N_class>>::iterator iter_N=
std::find_if((*iter)->m_Ns.begin(),(*iter)->m_Ns.end(),finder_N_class(N_obj));
if(iter_N!=(*iter)->m_Ns.end())
{
return FALSE;
}
else
{
(*iter)->m_Ns.push_back(N_obj);
return TRUE;
}
}
else
{
std::shared_ptr<relation_class> relation(new relation_class);
relation->m_one=One_obj;
relation->m_Ns.push_back(N_obj);
m_relations.push_back(relation);
return TRUE;
}
}catch(...)
{
return FALSE;
}
}
const std::shared_ptr<One_class>& _c_1_TO_N_relation::getOne(const std::shared_ptr<N_class> N_obj)const
{
for(std::list<std::shared_ptr<relation_class>>::const_iterator iter=m_relations.begin();
iter!=m_relations.end();++iter)
{
for(std::list<std::shared_ptr<N_class>>::iterator iter_N=(*iter)->m_Ns.begin();
iter_N!=(*iter)->m_Ns.end();++iter_N)
{
if((*iter_N)->get_value()==N_obj->get_value())
{
return (*iter)->m_one;
}
}
}
return retNULL;//这里需要改
}
const std::list<std::shared_ptr<N_class>>& _c_1_TO_N_relation::getNs(
const std::shared_ptr<One_class>& One_obj)const
{
for(std::list<std::shared_ptr<relation_class>>::const_iterator iter=m_relations.begin();
iter!=m_relations.end();++iter)
{
if((*iter)->m_one->get_value()==One_obj->get_value())
{
return (*iter)->m_Ns;
}
}
return retNULLList;
}
相关文章推荐
- 原创:产品经理的14条军规。(转贴请注明来自5G 常佳军http://www.5gme.com/space.php?uid=17341&amp;do=blog&amp;id=23168——转载本作者不收取费用,否则等着收律师事务所的律师信)
- [原创] C++操作符重载的变态用途--特征聚焦的子类转换
- 初学者看过来:简单谈谈 C/C++ 递归的思想,实现,以及和循环的关系。
- C/C++中数组和指针类型的关系
- 挑战30天C++入门极限-C/C++中数组和指针类型的关系
- C++热身系列三[原创于百合]
- [导入]css中的relative和absolute(原创,转载请注明)
- [原创] 一劳永逸:关于C/C++中指针、数组与函数复合定义形式的直观解释
- 网站总体设计与缓存的关系(原创)
- C++中static 成员关系
- [原创]windows2003下安装Borland C++builderX
- C/C++每日一课 >> [原创]细说如何确定一个变量的类型(2005-04-25)
- C++中的虚函数和多态的关系
- 关系数据库的查询优化策略----总结了一些查询优化的方法,希望可以对大家有所帮助(原创)
- C/C++每日一课 >> [原创]指针易犯错误集(初学者适用)(2005-05-08)
- [原创]最近学习STL,在C++库中苦寻不到BigInteger类,于是自己写了一个
- 谈谈用C++开发BREW程序[原创]
- [原创]关于C++的构造函数, 复制构造函数 和 operator =
- (原创)深入剖析:C++“多态性”在编译器中的实现
- 探索c++的函数pow()的实现方法·数学与程序设计的结合(绝对原创)