PHP、C++的重载

首先明确一点:PHP重载是用在面向对象的类当中,而不支持函数重载。

这点与C++不一样,在C++当中,重载可以用于面向过程和面向对象,而且方法也不一样。

在C++中,重载适用于当函数名相同时,函数所需的参数个数不相同或者参数个数相同,而参数的类型不同的情况,

在程序编译时,自动根据已提供的参数个数及类型选择相应的函数进行操作,比如下面一段C++代码:

#include<iostream>
using namespace std;
class Box{
private:
    int l,w;
public:
    void set(){
        l=0; w=0;
    }
  //此处重载的是set()函数
    void set(int ll){
        l=ll; w=0;
    }
    void set(int ll,int ww){
        l=ll; w=ww;
    }

    void display(){
        cout<<"L="<<l<<";";
        cout<<"W="<<w<<endl;
    }
};
int main()
{
    Box box_1,box_2,box_3;
    box_1.set();
    cout<<"box_1:
";
    box_1.display();

    box_2.set(5);
    cout<<"box_2:
";
    box_2.display();

    box_3.set(7,9);
    cout<<"box_3:
";
    box_3.display();
}

 输出结果是:

box_1:

L=0;w=0

box_2:

L=5;W=0

box_3:

L=7;W=9

从结果当中可以看出,在参数个数不同的时候,执行了不同的函数。

回到正题,PHP的重载在我看来其实就是一种覆盖(或者修改),即在父类的基础上,进行修改,赋予子类一个新的功能,该功能是父类当中没有的。C++当中亦可如此,只不过在C++中不叫重载罢了。

参考一下代码:

<?php
	class Student{
		public function display(){
			echo "I am a student! <br>";
			echo "I haven't graduate <br>";
		}
	}

	class Graduate extends Student{
		public function display(){
			//要想实现重载,则子类当中需要重载的函数名必须与父类当中此函数的函数名相同
			//此处以display()为例。
			echo "I was a student before! <br>";
			echo "but I have graduated! <br>";
		}
	}

	$stu=new Student();
	$stu->display();

	$gra=new Graduate();
	$gra->display();	
?> 

  

 输出结果:

I am a student!
I haven't graduate
I was a student before!
but I have graduated!

原文地址:https://www.cnblogs.com/-beyond/p/5721219.html