首页 > 其他分享 >类和类之间的关系

类和类之间的关系

时间:2024-03-30 15:33:06浏览次数:31  
标签:关系 __ const String List node 类和类 之间 构造函数

类和类之间的关系

  • Object Oriented Programming

  • Object Oriented Design

面向对象的思想:类与类之间产生关系

关系:

  • Inheritance -> 继承

  • Composition -> 复合

  • Delegation -> 委托 -> Composition by reference -> 两个类之间用指针相连

复合(composition)

示例代码:

#pragma once
#ifndef __ADAPTER__
#define __ADAPTER__

template<class T>
class queue
{
protected:
deque<T> c; // 底层容器,这就是复合的概念
public:
bool empty() const { return c.empty(); }
size_type size() const { return c.size(); }
T front() { return c.front(); }
T back() { return c.back(); }

void push(const value_type& x) { c.push_back(x); }
void pop() { c.pop_front(); }
};

#endif // !__ADAPTER__

复合的概念:

queue这个类中有一个其他的类deque<T> -> queue当中全部调用deque的方法去实现功能

adapter适配.可能在deque当中开放了100个功能.写一个queue复合了deque,但是只开放了六个接口.

复合概念下的构造函数和析构函数

  • 构造由内而外

示例代码:

// Container类当中复合一个Component类
Container::Container(...) : Component() {...}; // 这是正确的写法.只是在构造这一步编译器会帮我们去做这个事情

默认调用的是无参数构造函数,需要调用其他的构造函数需要手动编写修改

  • 析构由外而内

示例代码:

Container::~Container(...) {... ~Component()};

Composition by reference

A类当中包含着B类的指针:

#pragma once

// 防卫式声明
#ifndef __STRING__
#define __STRING__

#include <string.h>

// 头文件定义
class StringRep;
class String
{
public:
// 设计构造函数 -> 这里只是定义了函数接口.并没有实现
String(const char* cstr = 0);
String(const String& str); // 接收自己为参数,所以是拷贝构造
String& operator=(const String& str); // s2 = s1,作用的是s2,那么s2就要先自毁,自毁完了以后在创建一个和s1一样大的内存空间进行拷贝
~String(); // 析构函数 -> 当类死亡的时候(离开他的作用域)析构函数就会被调用
private:
StringRep* rep;
};

#endif // !__STRING__

StringRep

#pragma once
#ifndef __STRINGREP__
#define __STRINGREP__

#include "string.h"
namespace {
class StringRep
{
friend class String;
StringRep(const char* s);
~StringRep();
int count;
char* rep;
};
}

#endif // !_STRINGREP__

Inheritance(继承)

继承语法:

#pragma once
#ifndef __NODE__
#define __NODE__

struct _List_node_base
{
_List_node_base* _M_next;
_List_node_base* _M_prev;
};

template<typename _Tp>
// : public _List_node_base为继承的语法
struct _List_node : public _List_node_base
{
_Tp _M_data;
};

#endif // !__NODE__

这里的构造函数和析构函数和复合的情况一样

  • 构造函数先调用父类.然后才用自己的构造函数

  • 析构函数先调用自己的,然后再调用父类的构造函数

  •  

标签:关系,__,const,String,List,node,类和类,之间,构造函数
From: https://www.cnblogs.com/JunkingBoy/p/18105568

相关文章

  • 一文搞懂!Python中的 __call__以及其与自动调用forward()的关系
    在阅读一些深度学习项目的代码中,我们会发现这样一个问题,深度学习网络模型中常常要定义forward()方法,但是在使用该函数时却没有显式地调用函数的forward(),却好像“自动”地执行了。比如下面这个例子(不可执行的代码,仅描述常见网络模型的大致定义框架、模型实例化和获取输出......
  • 05程序与用户之间进行交互_基本运算符_流程控制语句
    【一】程序与用户之间进行交互【1】什么是与用户交互交互的本质就是输入、输出用户交互就是人往计算机中input/输入数据,计算机print/输出结果【二】如何与用户交互【1】输入(input)用户输入一些内容,用户按下回车键后,input函数会返回用户输入的内容input接受所有的数据类型......
  • ssh实现linux机器之间的互相访问和命令控制
    在Linux系统之间互相访问并通过命令控制可以通过多种方式实现,其中最常用的方法是使用SSH(SecureShell)协议。SSH是一个提供加密的网络协议,通过它可以安全地在不安全的网络上进行远程登录和其他网络服务。以下是使用SSH实现Linux系统之间互相访问的基本步骤:1.安装SSH服务在两台Li......
  • 浏览器内多个标签页之间的通信方式有哪些
    浏览器内多个标签页之间的通信方式有哪些?1.localStorage(不可跨域)在Web开发中,localStorage是一个用于在浏览器中存储键值对数据的API,可以被不同标签页或窗口之间共享。借助相关的storageevent可以使用它来实现多个标签页之间的通信。2.cookie(不可跨域)Cookie......
  • cgroup、资源池、用户的关系..涉及到GaussDB(DWS)的资源设置
    本文分享自华为云社区《GaussDB(DWS)的cgroup、资源池、用户的关系》,作者:nullptr_。1.前言本文主要展示了DWS中cgroup、资源池、用户之间的关系,从而对DWS的资源设置情况有个初步了解。2.相关对象创建脚本gs_ssh-c"gs_cgroup-cSClassN1-Gwn1"gs_ssh-c"gs_cgroup-......
  • 实验一 关系数据库标准语言SQL
    第1关:创建数据库#代码开始CREATEDATABASEdemo;showdatabases;#代码结束第2关:创建表#代码开始#1.切换到demo数据库USEdemo;#2.分别创建s、p、j和spj数据表#创建s表:CREATETABLEs(snoCHAR(2),snameVARCHAR(10),statusINT,cityVA......
  • 【编程基础】进制之间的转换
    前言:文本推荐阅读时间20-30mins。详细讲解进制之间转换的原理。让你知其然,知其所以然。目录1.十进制、二进制、八进制、十六进制 符号反应权重符号所在的位置也反应权重为什么人类会发明十进制推广到r进制计数法2.其他进制转换成十进制记住每一位的位权3.二进制,八......
  • .NET C#导出解决方案的NuGet依赖关系
    前言公司项目需要写DS设计文档,文档需要标识出来你的解决方案文件下的所有项目都使用了NuGet哪些第三方依赖,我们都知道sln下面的所有.csproj文件中的节点下会标识出对应的依赖,但一个一个对比又太麻烦(主要是懒),有时候一个sln能有10几个project项目,能不能写脚本一键导出这些依赖关......
  • vue3 mitt事件总线,组件之间通信,通信范围不在局限于父子组件之间
    vue2使用的EventBus事件总线在vue3已经被弃用了;vue3使用的事件总线为mitt,可用父子组件,兄弟组件之间通信我使用的方法如下新建一个mitt.ts文件保存以下内容importmitts,{Emitter}from"mitt";//定义类型别名,因全局使用并且需要自定义事件名称,所以使用索引签名......
  • 初探OceanBase:一款高性能分布式(实时HTAP)关系数据库的技术剖析
    码到三十五:个人主页心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得!在数据驱动的时代,数据库作为存储和管理数据的核心组件,其性能、稳定性和扩展性都至关重要。OceanBase作为一款高性能的分布式关系数据库,以其出色的技术特性和卓越的性能表现,吸引了......