码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【c++】对象与对象之间的关系


    对象与对象之间的关系

    • 依赖(使用一个,不具有整体与部分的关系)
    • 关联(使用一个,不具有整体与部分的关系)
    • 聚合(有一个,有整体与部分之间的关系)
    • 组合(有一个,有整体与部分之间的关系)
    • 继承(是一个)
    • 模板

    依赖(使用一个,不具有整体与部分的关系)

    依赖关系:
    如学生,电脑,书。学生学习依赖与电脑和书 (耦合度最低,学生学习可以靠电脑,也可以靠书,也可以靠其它的)

    class Student
    {
    public:
    	void Study(Book book){}
    	void Study(DeskTopComputer deskTopComputer){}
    	void Study(NoteBookComputer noteBookComputer){}
    };
    class Book
    {
    };
    class DeskTopComputer
    {
    };
    class NoteBookComputer
    {
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    关联(使用一个,不具有整体与部分的关系)

    关联关系:老师与课程的关系 (老师固定教某个课程)

    class Course
    {
    };
    class ChineseCourse : public Course
    {
    };
    class EnglishCourse : public Course
    {
    };
    class MathCourse : public Course
    {
    };
    class Teacher
    {
    private:
    	Course* course_;
    	Course& course_;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    关联关系一般用指针和引用

    因为课程的生存期不应该与老师有关,就比如这个老师去世了,难道这个课程就在这个世界上消亡了吗

    而指针和引用的区别
    指针的关联就比较弱.
    就比如说,今天这个老师可以带这门课,明天可以带其它的课,当把这个指针置为空时,还可以表示这个老师不带课了
    而对于引用,这个老师带这个课之后就不能换

    使用引用时要注意的问题

    class Teacher
    {
    public:
    	Teacher(Course course):course_(course){}
    private:
    	Course& course_;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这样可以实现功能吗?

    不能,因为它引用的是这个构造函数中的临时对象,当构造函数执行完之后,它的生存期就结束了,所有它引用的是一个已死亡的对象

    我们应该使用引用

    class Teacher
    {
    public:
    	Teacher(Course &course):course_(course){}
    private:
    	Course& course_;
    };
    int main()
    {
    	MathCourse mc;
    	Teacher t(mc);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    我们可以引用一个外部的对象,但是我们一定要保证外部对象的生产期要比老师长

    聚合(有一个,有整体与部分之间的关系)

    与组合关系不同,整体和部分不是强依赖。即使整体不在了,部分仍然存在。
    如部门与员工,部门不在了,但是员工还在

    使用指针类型设计,不使用引用,因为引用一旦与对象关联,就不能更改了,但是对于部门来说,他也可以把你开了然后雇佣其它人。

    
    ```cpp
    class Department
    {
    private:
    	Employee* employee_;
    
    };
    class  Employee
    {
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    组合(有一个,有整体与部分之间的关系)

    组合关系:是强依赖。 如人是由身体和灵魂组成的,部分与整体之间有生存期的关系,比如,人死了,那么他的身体和灵魂就消亡了。

    class Body
    {
    };
    class Soul
    {
    };
    class Person
    {
    private:
    	Body body_;
    	Soul soul_;
    
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    继承(是一个)

    泛化关系: 像继承关系 如学生与人的关系 耦合度更高,主要表达的是 ”是一个的含义“,如下面,学生是一个人

    class Person
    {
    };
    class Student :public Person
    {
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    模板

    为了重用代码,代码就必须是通用的,通用的代码就必须不受返回类型的限制,那么我们就可以把数据类型改为一个设计参数,这种类型的程序设计称为参数化程序设计。

    template<class T>
    //或者template
    template<t>
    class Test
    {
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    移动测试Appium安装
    促进国内凝聚态物理理论与统计物理及交叉学科的学术交流及促进学科发展,与龙讯旷腾相约济南
    【数据结构前置知识】初识集合框架和时间,空间复杂度
    设计模式之拦截器模式
    k8s系列文章三:单节点集群服务
    Databend JSON 复杂数据类型的设计与使用 | Databend 特性系列
    Unity接入北斗探针SDK(基于UnityPlayerActivity)丨二、usb-serial-for-android导出jar包
    算法训练营day45|动态规划 part07:完全背包 (LeetCode 70. 爬楼梯(进阶)、322. 零钱兑换、279.完全平方数)
    论文阅读:Privacy Leakage of Real-World Vertical Federated Learning
    互联网摸鱼日报(2022-12-01)
  • 原文地址:https://blog.csdn.net/aoeaoao/article/details/125940179
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号