设为首页 加入收藏

TOP

2022.01.18.类之间的横向关系
2023-07-23 13:38:22 】 浏览:28
Tags:2022.01.18. 向关系

组合:部分与整体,包含与被包含有生命周期约束关系

它是一种“is a part of”的关系(部分与整体)。组合是一个类中包含另一个类对象。相比聚合,组合是一种强所属关系,组合关系的两个对象往往具有相同的生命周期,被组合的对象在组合对象常见的同时或者之后创建,在组合对象销毁之前销毁,一般来说,被组合对象不能脱离组合对象独立存在,整体不存在,部分一定不存在

通常在组合类中包含被组合类随想来实现组合关系

 

class CHand{ public: void move(){ cout<<"小手拍动" <<endl; } }; class CPeople{ public: CHand m_hand; void clap(){ m_hand.move(); cout<<"发出阵阵掌声"<<endl; }

 

依赖:完成某个功能必须用到被依赖的对象,一般当工具对待,没有生命周期约束关系

它是一种“use a”的关系,一个对象的某种行为依赖于另一个类对象,被依赖的对象为完成某个搞那个能的工具,并不持有它的引用,只有在完成某个功能时才会用到,而且是必不可少的,依赖之间是没有声明周期约束关系的

 通过长将被依赖的对象作为另一类方法的参数的形式实现两个类之间的依赖关系

class CComputer{ public: void Compile(){ cout<<"正在编译。。。生成、、、可执行程序"<<endl; } }; class CPeople{ public: void program(CComputer*pComp){ if(pComp){ m_hand.move(); cout<<"噼里啪啦,敲击键盘,输入一行行代码"<<endl; pComp->Compile(); } }

 

关联:可有可无的平等关系,没有生命周期约束

 它是一种“has a”的关系。关联不是从属关系而是平等关系,但不可占有对方,完成某个功能与被关联的对象有关,但被关联的对象可有可无。被关联的对象与管理链的对象无生命周期约束关系,被关联对象的声明周期有谁创造就谁守护。只要二者同意,就可以随时解除关系或是进行关联,被关联的对向还可以再被别的对象关联,所以关联是可以共享的。

通常在关联的类中定义被关联的对象的指针形式实现两个类之间的关联关系。

class CFriend{
public:
    void play(){
        cout<<"我的朋友正在玩耍"<<endl;;
    }
};
class CPeople{
public:
    CFriend *m_pFri;
    CPeople(){
        m_pFri=nullptr;
    }
    void playwangzhe(){
        cout<<"准备要打王者"<<endl;
        if(m_pFri){
            m_pFri->play();
            cout<<"走啊,开黑"<<endl;
            cout<<"拿下五杀"<<endl;
        }
        else {
            cout<<"自己匹配"<<endl;
            cout<<"拿下五杀"<<endl;
        }
    }
};

 

聚合:被聚合的对象组合起来(容器)

它是一种“owns a”的关系。多个悲剧和的对象聚集起来星星哼一个强大的整体聚合的目的是为了统一进行嘎UN里通过类型的对象,聚合是一种弱所属关系,被聚合的对象还可以再被别的对象关联,所以被聚合的对象还可以再被别的对象关联,所以被聚合的对象是可以共享的。虽然是共享的,聚合代表的是一种更亲密的关系,相当于强版本的关联。

#include<iostream>
using namespace std;
class CFamily{
public:
    CPeople* peoArr[10];
    CFamily(){
        
        for(int i=0;i<10;i++){
            if(peoArr[i]){
                peoArr[i]=nullptr;
                peoArr[0] = new CPeople;
            peoArr[1] = new CPeople;
            peoArr[2] = new CPeople;
            }
        }
    }
    ~CFamily(){
        for(int i=0;i<10;i++){
            if(peoArr[i]){
                delete peoArr[i];
                peoArr[i]=nullptr;

            }
        }
    }
public:
    void AllPeopleProgram(CComputer *pComp){
    
        for(int i=0;i<10;i++){
            if(peoArr[i]){
                cout<<""<<i<<":"<<endl;
                peoArr[i]->program(pComp);
            }
        }
    }
};
int main(){
    CFamily fai;
    CComputer *pComp = new CComputer;
    fai.AllPeopleProgram(pComp);
    return 0;
}

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++初探索 下一篇重载的奥义之函数重载

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目