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://www.cnblogs.com/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

Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理的更多相关文章

  1. C#中通过类来继承两个接口,父类实例化接口中的方法,子类继承父类,调用方法

    实现了父类继承接口,父类实例化接口的方法,子类继承父类,子类调用父类的方法直接使用 代码如下: using System; using System.Collections.Generic; usin ...

  2. C#通过反射获取类中的方法和参数个数,反射调用方法带参数

    using System; using System.Reflection; namespace ConsoleApp2 { class Program { static void Main(stri ...

  3. (1)构造方法和方法重载 (2)this关键字 (3)方法的传参和递归调用

    1.构造方法和方法重载如: Person p = new Person(); - 声明Person类型的引用p指向Person类型的对象 p.show(); - 调用名字为show()的成员方法 1. ...

  4. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  5. 卧槽,好强大的魔法,竟能让Python支持方法重载

    1. 你真的了解方法重载吗? 方法重载是面向对象中一个非常重要的概念,在类中包含了成员方法和构造方法.如果类中存在多个同名,且参数(个数和类型)不同的成员方法或构造方法,那么这些成员方法或构造方法就被 ...

  6. 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写

    一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...

  7. JavaScript基础12——js的方法重载

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. Java 方法覆盖和方法重载

    方法重载(overloaded),要求方法的名称相同,参数列表不相同. 方法覆盖(override),要求①方法名相同,②参数列表相同,③返回值相同 如果是方法覆盖,要注意以下几种情况: 1.子类方法 ...

  9. [置顶] 在js中如何实现方法重载?以及函数的参数问题

    都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了. 但每一个函数都有一个特殊的参数argum ...

随机推荐

  1. Linux CentOS下Python+robot framework环境搭建

    转载自:http://blog.sina.com.cn/s/blog_13cc013b50102vof1.html 操作系统环境:CentOS 6.5-x86_64 下载地址:http://www.c ...

  2. intellij idea 为JavaEE项目建立Servlet

    建立Servlet的方法 顶部菜单栏 View > Tool Windows > Web. 然后互相web窗口 右键Web>new>Servlet 弹出窗口

  3. 【单调队列】bzoj2096 [Poi2010]Pilots

    用两个单调队列维护序列中的最大值和最小值即可. poi~ #include<cstdio> #include<algorithm> using namespace std; i ...

  4. iOS 读取Json 代码

    保存一下iOS 读取Json的代码,留着以后Copy用,哈哈. NSString* path = [[NSBundle mainBundle] pathForResource: @"Sand ...

  5. oracle审计AUD$过大导致的数据库登录异常

      今天,省分技术人员反映数据库登录异常. 查询oerr,发现该错误是一般性提示,可能导致的原因有数据库未注册.本地文件配置问题等.由于平时连接并没有问题,是突发情况,所以排除了配置问题. 远程登录查 ...

  6. php简单常用的API

    1.var_dump($x),查看数据类型,以及数据 var_dump($x); //string(12) "就是就是" 2.memory_get_usage()到当前这一步为止一 ...

  7. leetcode第一刷_Edit Distance

    最小编辑距离.非常经典的问题.今年微软实习生的笔试有一个这个的扩展版,牵扯到模板之类的,当时一行代码也没写出来. . dp能够非常优雅的解决问题.状态转移方程也非常明白.用pos[i][j]表示wor ...

  8. iOS:GitHub上值得关注的iOS开源项目

    1.AFNetworking地址:https://github.com/AFNetworking/AFNetworking用于网络请求 2.JSONKit地址:https://github.com/j ...

  9. Solr学习、安装与Quick Start

    之前用Lucene进行了一些简单的例子,现在安装Solr学习一下. 在mac下,貌似可以直接brew install solr来进行安装.尝试一下. 貌似安装成功了: ==> Summary

  10. http://blog.163.com/eugeneheen_chen@126/blog/static/120812157201291994916866/

    http://blog.163.com/eugeneheen_chen@126/blog/static/120812157201291994916866/