c++中对象与对象的关系

目录

1.依赖关系:

2.关联关系 

3.聚合关系

4.组合关系 

1.依赖关系:

是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;

举例:学生学习可以通过书,台式电脑,笔记本,还可以冥想式学习;

//依赖关系
class Book{};
class Deskcomputer{};//台式机
class Notecomputer {};//笔记本
class student   //学生
{
public:
    void study_process(Book* pbook = nullptr);
    void study_process(Deskcomputer* pc = nullptr);
    void study_process(Notecomputer* pn = nullptr);
};

int main()

{

 book cpp,java;

 Deskcomputer pc;

 Notecomputer nc;

 student john;

john.study_process();  //冥想

john.study_process(&cpp);  //boook(cpp)

john.study_process(&java); //book(java)

john.study_process(&&pc); //台式机

 john.study_process(&nc); //笔记本

return 0;

}

2.关联关系 

描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行 状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 

有两种关联关系:弱关联和强关联

举例:教师和课程之间就是一种关联关系;学生和学校就是一种关联关系;

//弱关联关系 : 使用指针
class Course{};
class Teacher
{
private:
    Course* p;  //弱关联,可以改变指向
public:
    Teacher(Course *pcourse=nullptr):p{pcourse}{}

    void setCourse(Course *pcourse=nullptr)

   {

       p = pcourse;

    }
};

int main()

{

 Course cpp,java,python;

Teacher chen(&cpp);           //教c++

chen.setCourse(&python);  //教python

chen.setCourse();               //退休后,不教书

return 0;

}

强关联关系: 对象间一旦建立关系不可再次更换对象


class Course {};
class Teacher
{
private:
    Course& p;  //强关联 ,一旦建立不可改变指向
                //不存在空引用,构造函数必须有参数

public:
    //Teacher(Course pcourse) :p{ pcourse } {}  error
    //形参为局部变量,生命周期结束后被析构掉
    Teacher(Course& pcourse) :p{ pcourse } {}
    void setCourse(Course& s)
    {
        p = s;            //按位进行赋值,并非改变指向
    }
};

3.聚合关系

聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成; 即使整体不存在了,部分仍然存在(例 如, 部门撤销了,人员不会消失,他们依然存在)

举例:点和圆

class point
{
private:
    float x;
    float y;
public:
    point(float a=0.0,float b=0.0):x{a},y{b}{}
    point(const point& s) = default; //采用系统默认
};
class circle
{
private:
    point _center{ 0,0 };
    float radu = 1;
    static const float pi;
public:
    circle(){}
};
const float circle::pi = 3.14;

int main()
{
    circle s; 
    point a;//点可以脱离圆单独存在

}

4.组合关系 

与聚合关系不同的是,整体和部分是强依赖(生存期控制),部分和整体是同生共死。

 class point
{
private:
    float x;
    float y;
public:
    point(float a=0.0,float b=0.0):x{a},y{b}{}
    point(const point& s) = default; //采用系统默认
};
class circle
{
private:
    point _center{ 0,0 };
    float radu = 1;
    static const float pi;
public:
    circle(){}
};
const float circle::pi = 3.14;

int main()
{
    circle s;   //当程序结束结束后,圆心会随着圆一起死亡
}
 

需要注意:聚合关系和组合关系只是语义上有区别,代码上没有区别 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值