Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理

1. 重载包括:普通方法的重载和构造方法的重载 1

1.1. 横向重载”和“纵向重载”1

1.2. 方法签名通过  方法名称,参数数量,参数类型+返回类型 参数顺序(命名参数)来组成1

1.3. 重载(重新载选方法流程,如下图所示2

2. 重载的实现方法::argus参数 vs  默认值。可选参数法 可选参数3

2.1. __call()函数是php类的默认魔法函数 3

2.2. Java通过反射调用方法重载 执行方法4

2.3. C++的重载4

3. 参考4

1. 重载包括:普通方法的重载和构造方法的重载

所谓重载,就是重复使用。而这个重复使用并不是反复使用同一个一模一样的东西,而是只是借用同一个名字而已。根据这个名字,根据不同的需求,提供不一样的功能。这就是重载。说一个例子,“父亲”这个词,其实是重载了的。如果你叫父亲,那是指你的父亲,而如果别人叫父亲,那是别人父亲。这也是一个重载。根据叫的人不同,也就是调用这个名称的对象不一样,产生的意义就不一样,这就是重载。所以,这里说的就是广义上的重载的概念。

1.1. 横向重载”和“纵向重载”

清楚了重载的本质分析,再来看看,“横向重载”和“纵向重载”的概念。函数特征标形式是在一个类中实现的多个函数版本,相当于在一个类中平铺多种形式,因此可以理解成横向(平铺)方式。而虚函数形式,是通过继承,构成一个垂直的关系。比如父亲跟儿子,属于两代人,是一个垂直的传递关系,父亲在上一层,儿子在下一层。也就是一个纵向的走向。C++中支持了虚拟函数,提供了重载虚函数的功能,因此就是我们说的“纵向重载”。

1.2. 方法签名通过  方法名称,参数数量,参数类型+返回类型 参数顺序(命名参数)来组成

1.3. 重载(重新载选方法流程,如下图所示

首先得到方法名称,查找符号表,没有跑出ex

通过参数数量判断

通过参数类型判断(强类型语言)

If(nomather())  ex

If(matchCount>1) ex cant select  amigo

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

2. 重载的实现方法::argus参数 vs  默认值。可选参数法 可选参数

Php通过func_num_args();js通过argus参数

Python通过默认值

一个语言选择重载或者可选参数两者中的一种就是了。像C# 4这样同时支持这两种形式的,就比较容易混淆。

著作权归作者所有。

Python的parameter设定也足以应付绝大多数需求了,所以社区基于效率与语言复杂度的考虑,干脆就不支持function overloading了

2.1. __call()函数是php类的默认魔法函数

,__call() 在一个对象的上下文中,如果调用的方法不存在的时候,它将被触发:
<?php
class MethodTest {
     public function __call($name, $arguments) {
        // Note: value of $name is case sensitive.
        echo "Calling object method '$name' "
             . implode(', ', $arguments). "\n";
     }
}

2.2. Java通过反射调用方法重载 执行方法

paip.编程语言方法重载实现的原理及python,php,js中实现方法重载 - attilax的专栏 - 博客频道 - CSDN.NET.htm

2.3. C++的重载

C语言中函数符号名和对应的函数名是一样的,而C++为了支持函数重载,符号名是在对应的函数名上改编的。如下图所示,函数名为func,而对应的符号名为_Z4funcv。

实际上函数的编译符号是根据函数名,函数的参数表(包括参数类型和数量)相关的。而且不同的编译器的命名规则不一样。只要能保证相同的函数名和不同的函数参数列表生成的符号名不一样就行

3. 参考

PHP-PHP重载和多态的实现? - 德问 编程社交问答.htm

java怎样实现重载一个方法 - 郑树恒的个人空间 - 开源中国社区.htm

C++重载:横向重载(静态重载)与纵向重载(动态重载)-C++语言-编程语言-C++技术网.htm

为什么 Python 不支持函数重载? - 编程语言 - 知乎.htm

转载于:https://www.cnblogs.com/attilax/p/5963527.html

Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理相关推荐

  1. C#利用方法重载实现2个整数,2个双精度数,3个整数中求最大值。由于设计了方法重载,系统会根据调用方法时传递的实参类型和个数而自动选择相应的方法来求最大数。

    1.题目要求如下: C#利用方法重载实现2个整数,2个双精度数,3个整数中求最大值.由于设计了方法重载,系统会根据调用方法时传递的实参类型和个数而自动选择相应的方法来求最大数. 2.来吧展示,代码如下 ...

  2. java 在主方法中定义两个变量 调用方法进行加10_计算机考试二级考试Java模拟试题附答案...

    全国计算机等级考试二级考试,需要考生在考前做好足够的复习准备,下面小编为大家带来计算机考试二级考试Java模拟试题,供各位考生练习! 计算机考试二级考试Java模拟试题一 1.类Test1定义如下:p ...

  3. php中接口调用方法的区别,phpcms常用接口调用方法

    1.phpcms可视化编辑器的调用方法 需要用到editor函数,editor($textareaid = 'content', $toolbar = 'phpcms', $width = 500, ...

  4. java 反射 对象的方法_java通过反射创建对象并调用方法

    这篇文章主要介绍了java通过反射创建对象并调用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用户类 package com.lf.ent ...

  5. 方法重载在同一个类中,方法名相同,参数不同,可以定义多个同名的方法根据不同的参数,可以调用不同的方法

    ```java /**  * 测试使用方法的重载  */ public class Test { public static void sum(int a,int b){         System ...

  6. php面向对象调用方法,在面向对象的php中调用方法

    我相信这对大多数人来说似乎是一个愚蠢的问题.然而,我一直在抨击我的头一阵子. 来自ASP.NET / C#,我现在试图使用PHP.但整个OOrintation给我很难. 我有以下代码: echo &q ...

  7. window.parent方法获取父页面属性或者调用方法

    父页面: <script type="text/javascript">var serviceType = "服务类型"; </script& ...

  8. java overload_Java方法重载Overload原理及使用解析

    这篇文章主要介绍了Java方法重载Overload原理及使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 为什么要用方法重载: 对于功能类似的 ...

  9. Java:封装的概念,UML类图,构造方法,this关键字,static关键字,方法重载,包package

                     oop三大特性:封装,继承,多态 oop一般指面向对象程序设计(一种计算机编程架构) 一.封装的概念:    将东西包在一起,然后以新的完整形式呈现出来       ...

最新文章

  1. python中list转csv的两种方法
  2. 初始Spring boot和一个入门SpringBoot工程
  3. ruby + phantomjs 自动化测试 - GA
  4. SAP Spartacus auto focus Directive响应模型变化的一些触发时机例子
  5. 系统调用软中断处理程序system_call分析
  6. 群晖备份linux分区,数据丢失的后悔药,群晖NAS备份方案详解
  7. linux写文件操作同步,linux 可执行文件与写操作的同步问题(文件读写操作产生的锁机制)...
  8. 前苹果M1芯片设计总监跳槽英特尔 或将负责所有SoC架构设计
  9. 李宏毅自然语言处理——BERT和它的家族
  10. mysql数据迁移性能_百万级MySQL的数据量,该如何快速的完成数据迁移?
  11. 第三十七课.宽度学习
  12. Java大数开根号板子
  13. 净资产收益率ROE连续3年超过15%的股票排名
  14. 庞果答题:亿阳信通:不可表示的数 的一个人见解(8-13第二次更新。)
  15. 2. 导弹防御系统(动态规划)
  16. cdr轮廓字怎么把轮廓拆出来_用corelDraw怎么把文字做成轮廓?
  17. zabbix调用sendsms.py脚本,发送短信
  18. 分级渲染--百度地图路段红黄绿功能
  19. verilog i2c 通用控制模块
  20. 听说你要把Linux内核源码读完?

热门文章

  1. Tomcat启动提示At least one JAR was scanned for TLDs yet contained no TLDs
  2. bootstrapValidator验证失败问题
  3. Linux系统根据端口号查找项目路径
  4. maya扇子动画_maya变形金刚全流程动画教学(永久有效)
  5. Win10 独立音量调整
  6. jquery的DOM节点操作(替换元素节点)
  7. Lc101对称二叉树
  8. Python入门--列表元素的排序操作,sort(),sorted()
  9. excel怎么设置自动计算_Excel怎么计算所占百分比?
  10. OpenGL基础17:颜色