面向对象技术第一讲 多态性

XGBoost的改进----Lightgbm Lightgbm改进的点: 基于Histogram的决策树算法 带深度限制的Leaf-wise的叶子生长策略 直方图做差加速 直接支持类别特征(Categorical Feature) Cache命中率优化 基于直方图的稀疏特征优化 多线程优化 下面主要介绍Histogram(直方图)做差加速、带深度限制的Leaf-wise的叶子生长策略。 基于histogram的决策树算法 直方图算法的基本思... 阅读详情

 面向对象技术第一讲  多态性


一﹑什么是多态?为什么要支持多态?

多态是一种普遍存在的现象,如water的三种形态:冰﹑水﹑汽,又如算术运算1+1, 1+0.5, 1/2+0.5等。

多态性用一句经典的英文来解释就是:a value can belong to multiple types.

那么在软件设计中支持多态有什么好处呢?首先,可以使程序中的数学运算符合常规的数学运算规则,为程序提供更强的表达能力;其次使得对不同类型的数据有同样的操作语义,可以实现程序的重用,而重用标识的资源,可以提高程序的可读性和可理解性。

软件系统支持多态的前提就是能够静态(编译时)或者动态(运行时)地确定类型。

二﹑多态的分类有哪些?

多态分为两种:通用的多态(universal)和特定的多态(ad hoc)。两者的区别是前者对工作的类型不加限制,允许对不同类型的值执行相同的代码;后者只对有限数量的类型有效,而且对不同类型的值可能要执行不同的代码。

通用的多态又分为参数多态(parametric)和包含多态(inclusion);特定的多态分为过载多

态(overloading)和强制多态(coercion)。具体见下图:

2.1参数多态

    概念:采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型。

    例如:Ada中的generic(类属 )。

    见下例:


分析:这两个packages的:

·应用内涵一致:提供的都是堆栈抽象操作。

·实现结构相似:采用同类数据结构,实现代码相同。

·元素的类型不同,一些用常量表示的细节不同。

对比:函数是相似的语句序列的一种涵义明确的抽象,用函数中的语句表示相同的部分,用形参指明不同的部分,用实参体现不同的部分。但是,函数的参数只能是数据,不能是类型。

    类属在一个抽象结构中允许以参量形式来表示可变的类型﹑函数﹑常数﹑数据值,在编译时

(静态)进行实例化,结果是一个具体的结构(类型﹑函数等)。而且类型的实例化可以静态进

行,也可以动态进行,但结果都是一个值。

Ada中的generic结构体现的多态性例子如下:

generic结构调用的时候的情况:

可见:

·对实参所取得类型不加限制。

·对不同的实参执行的是相同的代码。

因而构成了多态。

2.2 包含多态

概念:同样的操作可用于一个类型及其子类型。(注意是子类型,不是子类。)包含多态

一般需要进行运行时的类型检查。如Pascal中的子界。


几点需要注意的地方:

1. 包含多态的操作存在着逆单调(Anti-mornotonic)。即一个类型t上的操作,当其定义域缩小成t的一个子类型时,其值域应不小于t.

2.3 过载多态

概念:同一个名(操作符﹑函数名)在不同的上下文中有不同的类型。程序设计语言中基本类型的大多数操作符都是过载多态的。如c语言中的

==  :  int * int -> int

==  :  double*double->int

==  :  char*char->int

有一些程序设计语言允许用户自定义过载多态的操作符。如c++语言中的:

bool  operator == (Complex1 c1,  Complex c2);

bool  operator ==(Address a1,  Address a2);

过载多态的操作符或函数名,他所对应的通常是不同的实现。


2.4 强制多态

概念:编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。程序设计语言中基本类型的大多数操作符,在发生不同类型的数据进行混合运算时,

编译程序一般都会进行强制多态。程序员也可以显示地进行强制多态的操作(Casting)。

例如:

要注意的是并不是任意两个类型之间都可以进行强制多态。在不同类型之间实现强制多态,通常需要执行不同的转换操作。强制多态的原则是:将值集较小(即占用存储空间较小)的类型,变换成值集包含了前者(即占用存储空间较大)的类型,反之,应当注意可能发生的对值的损伤(特别是在使用Casting时)。

有时,强制多态与过载多态是混合出现的。例如,对于表达式1+2; 1.0+2; 1+2.0; 1.0+2.0;

中出现的多态,就会有多种解释:

·操作符+有四种过载多态;

·操作符+只有一种:double * double -> double, 要将参与运算的整数强制变换成浮点数;

·操作符+有两种过载多态:int * int -> int 和 double * double -> double,要将混合运算中的整数强制变换成浮点数。

 
三﹑ 其他类型的多态

现在的多数文献中都认为,在面向对象程序设计语言中还存在着两种多态:

·在有继承关系的类之间存在的多态(但不能完全等同于包含多态);

·通过动态绑定机制,在运行时才确定接受消息的对象类型(如c++语言中的虚拟函数)。

《C++面向对象程序设计》六、多态性与虚函数6.1 多态性概述 C++的产生和特点C++是美国贝尔实验室的Bjarne Stroustrup博士在C语言的基础上,弥补了C语言存在的一些缺陷,增加了面向对象的特征,于1980年。继承可以在已有类的基础上创建新的类,新类可以从一个或多个已有类中继承成员函数和数据成员,而且可以重新定义或加进新的数据和函数,从而形成类的层次或等级。如果在主函数中用new运算符建立一个派生类的无名对象和定义一个基类的对象指针,并将无名对象的地址赋值给这个对象指针,当用delete运算符撤销无名对象时,系统只。 阅读详情

相关推荐

基于FastLIO2与TEB算法的机器狗自主导航系统实战

本文详细介绍了如何为机器狗构建一套基于FastLIO2与TEB算法的自主导航系统。通过整合FastLIO2激光惯性里程计实现精准定位,并采用TEB局部规划器进行灵活路径规划与动态避障,解决了传统方案在复杂地形下反应慢、易碰撞的问题。文章提供了从环境搭建、算法部署、地图转换到系统调试的完整实战指南,帮助开发者实现机器狗的稳健自主行走。

beer8的博客 324

评分卡实例:一步一步实现评分卡(详细长文)

《老饼讲解机器学习》本文讲述小贷评分卡的完整流程,包括数据处理、变量筛选、建模、上线等。小贷评分卡有很多细节,它不只是单纯的逻辑回归模型,而是一整套业务处理,本文正是把小贷评分卡的细节、操作、原理以例子的形式呈现与讲解,...

ywj_1991的博客 3万+

前馈神经网络求解XOR问题

摘要 前馈神经网络是一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层之间没有反馈。是目前应用最广泛、发展最迅速的人工神经网络之一。研究从20世纪60年代开始,目前理论研究和实际应用达到了很高的水平[1]。本节通过设计包含输入层、一个隐含层和输出层的前馈神经网络,实现XOR运算,并基于计算数据或实验数据分析隐含层决策面的特点,进而总结前馈神经网络隐含层的作用。 1.1 神经网络结构设计 1.1.1 XOR问题描述 ...

sinat_28178805的博客 2359

评分卡模型建模、WOE分箱以及模型评估

向AI转型的程序员都关注了这个号????????????评分卡的种类——ABC卡A卡(Application score card)申请评分卡,贷前,一般可做贷款0-1年的信用分析B卡(Behavior score card)行为评分卡, 贷中,在申请人有了一定行为后,有了较大数据进行的分析,一般为3-5年C卡(Collection score card)催收评分卡,贷后,需加入催收后客户反应等属性数据FICO信用...

datayx的文章 3710

lenovo联想拯救者Legion Y9000P 2022款2023款2024款笔记本电脑(82RF,82WK,82WQ,83DE,83DF)原装出厂Windows11预装OEM系统镜像下载

联想原装出厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家、联想浏览器、联想软件商店、legionzone控制中心等预装程序。链接:https://pan.baidu.com/s/1YBji_oh7xOkq-NxnS8Mm8g?链接:https://pan.baidu.com/s/1S7_enXmuoja1a9ASvUT5Fg?拯救者Legion Y9000P IRX9H 2024款【83DE】原厂Win11系统包。

QQ17855069的博客 6538

如何免费快速的部署一个自用免VIP的自动追剧工具!NAS新玩法!豆瓣与迅雷结合,轻松实现自动下载电影自动追剧功能(支持Windows,群晖nas,飞牛nas,软路由,服务器等Docker快速部署)

追剧党狂喜!豆瓣追剧神器,自动添加云盘,自动下载,微信通知,一键搞定!

XiaoqiangClub的博客 4587

评分卡模型

一、评分卡模型介绍 评分卡模型是常用的金融风控手段之一 风控,就是风险控制,我们采取各种措施和方法,减少风险发生的可能性,或风险发生时造成的损失 根据客户的各种属性和行为数据,利用信用评分模型,对客户的信用进行评分,从而决定是否给予授信,授信的额度和利率,减少在金融交易中存在的交易风险 按照不同的业务阶段,可以划分为三种: 贷前:申请评分卡(Application score card),称为A卡 贷中:行为评分卡(Behavior score card),称为B卡

u013052732的专栏 7643

多模态对齐方案

本文中我们介绍了 13 中常见的大型多模态模型(Large Multimodal Models, LMM),包括 BLIP-2,LLaVA、MiniGPT、Qwen-VL 以及 Ferret 等。最全 LMM 模型结构(13种)综述。单层linear投影、两层mlp。

liguandong 2084

评分卡模型(一)评分卡建模实战

一文带你学会使用评分卡建模

微信知乎搜索HsuHeinrich 1万+

【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件

本文介绍了如何将C#游戏开发中的代码从单个.cs文件拆分到多个.cs文件中,以提升代码的可维护性和可读性。文章演示了在Visual Studio中创建Hero类和ShowInfo类的具体步骤:通过右键项目名添加新建类,将原有代码分别剪切到对应的类文件中,并自动生成命名空间。拆分后需要在Program.cs中通过"using"指令引用这些类,最后通过运行测试验证功能正常。这种模块化代码组织方式能有效解决单一文件代码过长、结构混乱的问题。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1138

打开电脑自动弹窗问题:无法为文件‘D:\Config.Msi\*.rbf‘设置文件安全。错误:5。请确认...如何解决?| 提供多种解决方案,亲测有效!

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2916

面向对象技术第一讲 多态性(原创)

                      面向对象技术第一讲  多态性 一﹑什么是多态?为什么要支持多态?    多态是一种普遍存在的现象,如water的三种形态:冰﹑水﹑汽,又如算术运算1+1, 1+0.5, 1/2+0.5等。    多态性用一句经典的英文来解释就是:a value can belong to multiple types.    那么在软件设计中支持多态

6116

【100%通过率】华为od机试C卷【特殊的加密算法】Python 实现

有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下1.明文为一段数字串由0-9组成2.密码本为数字0-9组成的二维数组3.需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元格数字组成,上下和左右是相邻的,注意:对角线不相邻,同一个单元格的数字不能重复使用。

MISAYAONE的博客 5924

基础篇——面向对象及多态性详解

写代码的四点: 1.明确需求。要做什么? 2.分析思路。要怎么做?(1,2,3……) 3.确定步骤。每一个思路要用到哪些语句、方法和对象。 4.代码实现。用具体的语言代码将思路实现出来。学习新技术的四点: 1.该技术是什么? 2.该技术有什么特点?(使用需注意的方面) 3.该技术怎么使用?(写Demo) 4.该技术什么时候用?(在Pr...

一个灵活的胖子MrWang 4303

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

面向对象之多态性

多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类 继承之后,可以具有不同的数据类型或表现出不同的行为 Java 实现多态有 3 个必要条件:继承、重写和向上转型。 1、继承:在多态中必须存在有继承关系的子类和父类。 2、重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。 3、向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以...

weixin_44540580的博客 2899

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

面向对象的多态性

学习目标: 1. Object类的toString()与equals(Object  obj)方法 2. 面向对象的多态性 3. 抽象类与接口   A.Object类      ·Object类是所有Java类的根基类(“祖先类”)      ·如果在类的声明中未使用extends关键字指明其基类,则        默认基类为Object类             a.to

Tiffanya的博客 6224

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++面向对象程序设计 - 多态性

比如函数重载和运算符重载实现的多态性属于静态多态性,在程序编译时系统就能决定调用的是哪个函数,因此又称编译时的多态性;静态多态性是通过函数的重载实现的,运算符重载实质上也是函数重载。多态性是面向对象程序设计的一个重要特征,多态的意思是一个事物的多种形态。在C++程序设计中,多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。面向对象方法中的多态性,比如说向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。

觉醒法师的专栏 1422

java面向对象——多态性

面型对象 多态性 面向对象中多态性的思想是很重要的,什么是多态性呢?其实就是向上转型和向下转型,要注意的是向上转型其实是可以自动向上转型,但向下转型必须在向上转型确定关系之后才能向下转型。 多态性主要的两种体现方式: 方法的重载与覆写 对象的多态性 对象向上转型关系: 子类进行父类实例化操作,如果调用的方法被子类覆写过则调用的是子类的方法,没有覆写则调用父类本身的方法,转型之后,操作的是父类...

非凡的博客 684

关于C++中静态多态性和动态多态性的理解

1. 什么是多态性 1.0多态的简要介绍:多态中的态为形态的意思,在面向对象编程中是指向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。举个例子通俗来讲就是:比如说开学了,校长把这个消息发送给了所有人,但是所有人都是一样的反应吗?老师的行为是我需要提前备好课,学生的行为是准备好作业去学校,家长需要筹集学费。然后按照其特性来又分为静态多态性和动态多态性这两种,那么这两种又有什么区别呢?...

qq_43247276的博客 4380

面向对象多态性

面向对象多态性 面向对象的多态性体现在,一个对象有多种形态,例如:对象小明是一个学生,但也是一个人类。面向对象的多态性是建立在继承性之上的。 对象的向上转型。 对象的向上转型是安全的,创建子类当父类用。类和接口都是可以向上转型的。 父类 对象名 = new 子类(); 接口 对象名 = new 实现类(); eg: //父类 public class Fu { int num = 10...

zezea的博客 816

面向对象-多态性

 面向对象的软件开发语言具有三个重要的特点分别为封装性、继承性、多态性。封装性即意味着对象封装其内部的数据,使其对外不可见,以保证数据的安全性。继承性是代码复用的一个很好的解决方案,但是继承关系是编译器在编译阶段就为所有的对象决定的,因而在软件工程过程中,继承性太过死板,存在很大的局限性。而多态性,它是将多种不同的特殊行为进行抽象的一种能力,通过结合继承性,多态性很好地解决了OO遇到的很多麻烦

闪亮每一天 3869

C#面向对象(OOPs)中的多态性

面向对象编程中的多态性包括编译时和运行时行为。编译时多态性涉及方法和运算符重载,允许基于参数和运算符的多种行为。通过方法重写实现的运行时多态性使子类能够提供自己的超类方法实现。其他形式包括具有泛型的参数多态性、通过方法覆盖和接口的子类型多态性,以及用于隐式类型转换的强制多态性。这些概念有助于提高软件开发中的代码灵活性、可重用性和适应性。

知识无止境 1241

java面向对象多态性_Java 面向对象特性之多态性

多态性面向对象(OOP)三大特性:封装、继承、多态。多态性(polymorphism)指同一行为具有多种不同表现形式,在面向对象程序设计中表现为同一消息可以根据发送对象的类型不同,做出多种不同的行为。多态性的优点多态性能够从一定程度上消除类型之间的耦合关系,通过统一接口方式,不同类的对象可以直接替换,程序更加灵活,可扩展。面向对象多态性存在的三个必要条件继承重写父类引用指向子类对象多态性的实现方式...

weixin_30539081的博客 261

面向对象特征之三:多态性

一、面向对象特征之三:多态性 1、多态性:父类的引用指向子类对象; Person p1=new Man(); 多态 (父类) (子类) 容量小 容量大 相当于double 相当于int 如上总结归纳:多态性中,创建实体后,...

qq_39044046的博客 1105
上一篇: 在VC中动态加载ODBC的方法
下一篇: C++的学习感想  
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值