首页 > 编程语言 >面向对象编程和`GP`泛型编程

面向对象编程和`GP`泛型编程

时间:2024-04-26 11:59:33浏览次数:22  
标签:__ 调用 const GP 面向对象编程 泛型 方法 比较

面向对象编程和GP泛型编程

c++标准库

标准库并不是用面向对象的概念设计出来的

面向对象的概念关键点:

  • classclass的继承关系

  • 虚函数 -> 抽象class或者接口

面向对象库复杂的点在于继承关系很复杂

OOP(Object-Oriented programming)

关键概念:

  • class的数据放在类里面

  • 操作数据的函数也放在类里面

GP(Generic Programming)

泛型编程的关键概念:

  • 将数据和操作数据的方法分开来

示例代码:

template<typename T, class Alloc = T>
class vector
{
   
};

template<typename _RandomAccessIterator>
inline void sort(_RandomAccessIterator _first, _RandomAccessIterator _last) {

}

分析:

  • sort方法并没有声明在vector类当中

  • 调用sort方法取到vector的数据通过iterator迭代器

  • sort算法通过iterator迭代器确定操作范围,通过iterator取用container的元素

关键字inline

作用:

  • 将方法声明成inline那么在调用到该方法的地方会直接将方法体的内容写到调用处

  • 不需要去call存储方法的内存地址在进入方法进行调用

没有inline

  • 函数调用模型就是在方法调用处找到函数地址然后再调用函数,调用完成回到方法执行处继续往下执行

GP编程当中一个形象的例子:

  • 由于数据和处理数据的算法分开.通过迭代器去联系在一起

  • 那么例如比较大小的行为,就需要数据去定义如何比较

例如比较两个类的大小:

示例代码:

#pragma
#ifndef __GPBIG__
#define __GPBIG__

#include <iostream>

using namespace std;

bool strLonger(const string& a, const string& b) {
return a.size() < b.size();
}

// 这个默认的比较大小是通过字符的ascii码来比较大小.比较每一个码的大小值
template<class T>
inline const T& max(const T& a, const T& b) {
return a < b ? b : a;
}

// 这个默认比较大小是通过传入的方法进行比较.定义了一个strLonger方法来比较
template<class T>
inline const T& max(const T& a, const T& b, Compare comp) {
return comp(a, b) ? b : a;
}

#endif // !__GPBIG__

可以看到具体的比较大小的行为:

  • 有一套默认的方法去比较

  • 可以自己声明需要的比较方式去比较

标签:__,调用,const,GP,面向对象编程,泛型,方法,比较
From: https://www.cnblogs.com/JunkingBoy/p/18159717

相关文章

  • GPIO模式
    GPIO模式输出模式推挽输出用PMOS和NMOS协同工作电压输出为VDD和VSS芯片内部电压驱动驱动能力弱开漏输出只有NMOS工作NMOS断低通高借助外部电压驱动复用推挽输出复用开漏输出为什么复用?引脚除了输入同时还可以做片上外设(I2C、SPI等)输入模式上拉输入默认为高电平......
  • 路由选择协议三剑客--BGP协议
    一、背景边界网关协议(BorderGatewayProtocol,BGP)是用来处理像因特网规模大小的网络协议,能够妥善处理好不相关路由域间的多路连接协议。BGP一般用于企业和企业之间,也就是运营商骨干网的通信,一般使用在AS内或AS间通信,在大型企业网中实现的比较多。内部网关协议只用关心AS自治系......
  • 微雪 esp32c3 深度睡眠和 gpio 唤醒
    当项目由电源适配器供电时,我们一般不会太关心功耗。但是,如果要使用电池为项目供电,则需要精打细算。esp32深度睡眠在深度睡眠模式下,CPU、大多数RAM和所有数字外围设备都可以关闭。从深度睡眠中出来后,芯片通过复位重新启动,并从一开始就开始执行程序。系统无法自动进入深度睡眠......
  • 15_pinctl和gpio子系统
    pinctl和gpio子系统1.什么是pinctrl和gpio子系统?​ pinctrl子系统是用来设置引脚的复用关系和电气属性的,gpio子系统是当pinctrl子系统把引脚的复用关系设置为gpio功能以后就可以使用gpio子系统来操作引脚了,比如引脚的输入输出,高低电平等2.LinuxPinctrl子系统提供的功能是......
  • HarmonyOS 项目中泛型的使用
    泛型(Generics)概述泛型是一种编程语言特性,它支持类型参数化,使得定义的类、接口和方法可以适用于多种类型,而不仅仅是固定的一种类型。理解泛型泛型允许在定义接口时,让参数的类型更加灵活,从而使得功能更加强大。简而言之,泛型提供了一种方式,让代码能够适应不同的数据类型,而不需要为......
  • mORMot2 获取数据集(泛型)
    mORMot2获取数据集(泛型)第14章使用泛型现代Delphi版本的一个特点是能够使用泛型。varaMale:TSQLBaby;BeginaMale:=TSQLBaby.CreateAndFillPrepare(Client,'NameLIKE?ANDSex=?',['A\%',ord(sMale)]);trywhileaMale.FillOnedoDoSomethingWith(aM......
  • 学习笔记447—本地部署 Llama3 – 8B/70B 大模型!最简单的方法: 支持CPU /GPU运行 【3种
    本地部署Llama3–8B/70B大模型!最简单的方法:支持CPU/GPU运行【3种方案】目前在开源大模型领域,Llama3无疑是最强的!这次Meta不仅免费公布了8B和70B两个性能强悍的大模型,400B也即将发布,这是可以和GPT-4对打的存在!今天我们就来介绍3各本地部署方法,简单易懂,非常适合新手!1.G......
  • Pyinstaller打包 openvino,但未带上 openvino的依赖,找不到CPU,GPU
    命令:pyinstaller--onefile--collect-submodulesopenvino--collect-binariesopenvino--collect-dataopenvinoserver.pyserver.spec(自动生成)#-*-mode:python;coding:utf-8-*-fromPyInstaller.utils.hooksimportcollect_data_filesfromPyInstaller.util......
  • nvidia官方AI框架软件的命令行操作接口 —— NVIDIA GPU Cloud (NGC) CLI
    NVIDIAGPUCloud(NGC)CLI安装介绍地址:https://org.ngc.nvidia.com/setup/installers/cli安装好后需要输入自己的NVIDIANGC的APIKEY,该信息在下面地址中生成:https://org.ngc.nvidia.com/setup/api-key......
  • GPS网络时间服务器(子母钟系统)助力考场精准时钟建设
    GPS网络时间服务器(子母钟系统)助力考场精准时钟建设GPS网络时间服务器(子母钟系统)助力考场精准时钟建设京准电子科技官微——ahjzsz【摘要】时钟系统是校园网络中一个重要的精准计时系统,随着网络的普及,许多校园都建了自己的校园专网,使用的网络设备和服务器也日益增多,这些设备都有......