57静态关联与动态关联

简介: 57静态关联与动态关联

C++入门——60s从0到1

静态关联与动态关联

 

在C++中,关联是指将一个类的成员变量与另一个类的实例相关联。在C++中,有两种关联方式:静态关联和动态关联。

 

静态关联是在类定义时进行的关联,即在类定义中直接将另一个类的实例作为成员变量来声明。静态关联的优点是简单明了,但是缺点是不够灵活,因为一旦关联关系确定后,就无法修改或删除。

 

动态关联是在运行时进行关联的,即在程序运行时根据需要动态地关联一个类的实例到一个另一个类的实例上。动态关联通常使用指针或引用来实现。动态关联的优点是灵活性高,可以根据需要动态地修改或删除关联关系。缺点是需要更多的代码来管理关联关系。

 

下面是一个简单的示例代码,演示了如何使用静态关联和动态关联:

 

#include <iostream>
using namespace std;
 
// 类 A
class A {
public:
    void setName(string name) {
        this->name = name;
    }
    void printName() {
        cout << "Name: " << name << endl;
    }
private:
    string name;
};
 
// 类 B
class B {
public:
    void setA(A* a) {
        this->a = a;
    }
    void printA() {
        a->printName();
    }
private:
    A* a;
};
 
int main() {
    // 静态关联
    A a1("Alice");
    B b1;
    b1.setA(&a1);
    b1.printA(); // 输出 Name: Alice
 
    // 动态关联
    A a2("Bob");
    B* b2 = new B();
    b2->setA(&a2);
    b2->printA(); // 输出 Name: Bob
 
    delete b2; // 释放动态关联的对象
    return 0;
}

 

在上面的例子中,我们定义了两个类`A`和`B`。`A`类有一个成员变量`name`,`B`类有一个指向`A`对象的指针`a`。在`main()`函数中,我们演示了如何使用静态关联和动态关联来关联`A`对象和`B`对象。在静态关联的情况下,我们将`A`对象直接作为`B`对象的成员变量来声明;在动态关联的情况下,我们创建了一个指向`A`对象的指针,并将其赋值给`B`对象的成员变量`a`。通过这种方式,我们可以实现不同的关联方式,从而满足不同的需求。

目录
相关文章
|
机器学习/深度学习 算法 数据挖掘
统计学与Python:实现描述性统计和推断性统计分析
【4月更文挑战第12天】本文介绍了Python在统计学中的应用,重点讲解了如何使用Python进行描述性与推断性统计分析。Pandas和NumPy库用于描述性统计,提供数据概括和总结功能;Scipy和Statsmodels库支持推断性统计,包括假设检验和模型建立。通过数据导入、描述性统计量计算、图表绘制以及假设检验和回归分析等步骤,展示了Python实现统计分析的基本流程。持续学习和实践将有助于提升Python统计分析能力。
915 0
|
机器学习/深度学习 存储
卡方分箱、KS分箱、最优IV分箱、树结构分箱、自定义分箱
卡方分箱、KS分箱、最优IV分箱、树结构分箱、自定义分箱
3561 0
卡方分箱、KS分箱、最优IV分箱、树结构分箱、自定义分箱
|
存储 Web App开发 运维
发布、部署,傻傻分不清楚?从概念到实际场景,再到工具应用,一篇文章让你彻底搞清楚
部署和发布是软件工程中经常互换使用的两个术语,甚至感觉是等价的。然而,它们是不同的! • 部署是将软件从一个受控环境转移到另一个受控环境,它的目的是将软件从开发状态转化为生产状态,使得软件可以为用户提供服务。 • 发布是将软件推向用户的过程,应用程序需要多次更新、安全补丁和代码更改,跨平台和环境部署需要对版本进行适当的管理,有一定的计划性和管控因素。
4593 1
|
缓存 负载均衡 应用服务中间件
Nginx安装与使用: Nginx之编译安装的nginx加入systemctl、Nginx命令
Nginx安装与使用: Nginx之编译安装的nginx加入systemctl、Nginx命令
513 0
|
存储 算法 编译器
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(一)
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用
1830 0
|
Web App开发 存储 编解码
直播间源码android音视频开发
随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及如何技术选型,如何解决遇到的坑,本文抛砖引玉,欢迎大咖交流。
直播间源码android音视频开发
|
设计模式 Java 测试技术
优雅代码,建议掌握这 11个编程原则!
高质量的代码不仅让人信服,还能提升开发效率。本文总结了多位高手的经验,提炼出11条编码基本原则:DRY(避免重复)、KISS(简洁至上)、重构(优化代码)、SOLID(设计原则)、文档编写、创建优于继承、YAGNI(避免过度设计)、委托原则、始终保持代码清洁、封装变化以及优先使用组合而非继承。遵循这些原则,你的代码将更加优雅和高效。
607 3
|
SQL Oracle 安全
免费 Oracle 各版本 离线帮助使用和介绍
免费 Oracle 各版本 离线帮助使用和介绍
323 2
|
机器学习/深度学习 数据采集 人工智能
动手实践:从零开始训练AI模型的全面指南
【7月更文第14天】随着人工智能技术的飞速发展,训练AI模型已成为科研、工程乃至创业领域的热门技能。本文旨在为初学者提供一个清晰、实用的指南,带领大家从零开始,了解并实践如何训练一个人工智能模型。我们将以一个简单的线性回归任务为例,逐步深入,探讨数据预处理、模型构建、训练过程及评估方法,最后展示如何使用Python和深度学习库PyTorch实现这一过程。
7179 0