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:\n";
    box_1.display();

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

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

输出结果是:

box_1:

L=0;w=0

box_2:

L=5;W=0

box_3:

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

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

参考一下代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>重载</title>
	</head>
	<body>
		<?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();
		?>
	</body>
</html>

输出结果:

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

时间: 2024-10-06 13:43:35

PHP、C++的重载的相关文章

类的多态与重载

*----------------------------------------------------------------------* *       CLASS superclass DEFINITION  定义基类 *----------------------------------------------------------------------* * *-----------------------------------------------------------

重载&gt;&gt;运算符

#include <iostream>   #include <stdio.h>   using namespace std;   class Input   {       public:          //实际重载是右移运算符          Input & operator >> (int &a)          {              scanf("%d",&a);              fflush

java中的重写和重载

重写 在java中有很多的继承,继承下来的有变量.方法.在有一些子类要实现的方法中,方法名.传的参数.返回值跟父类中的方法一样,但具体实现又跟父类的不一样,这时候我们就需要重写父类的方法,就比如我们有一个类叫做Animals,Animals类中有一个叫做Call,然后我们继承Animals又生成了Cat类和Dog类,Cat和Dog也分别有自己特别的叫声,程序如下: 1 class Animals { 2 public void call() { 3 System.out.println("啊啊啊

关于运算符重载

运算符重载需遵循以下原则: 1.除了类所属关系运算符".".成员指针运算符".*".作用域运算符"::".sizeof运算符.三目运算符"?:"之外,C++中所有的运算符都可以进行重载 2.重载运算符限制在C++已有的运算符范围内,不允许创建新的运算符 3.重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符的操作数的个数及语法结构 4.运算符重载不能改变运算符用于内置类型的对象的含义,只能用于自定义类型对象之间,

模板类的友元重载

模板类的友元重载和普通类的友元重载有不同之处,可以参考这篇CSDN博客http://blog.csdn.net/ozwarld/article/details/7770808 #include <iostream> using namespace std; template <class T> class Test; // 模板类前置声明 template<class T> ostream& operator << (ostream& out

运算符重载

关键字:operator 相见:<高质量程序设计指南> P255 如果运算符被重载为全局函数,那么只有一个参数的运算符叫做一元运算符,有两个参数的运算符叫做二元运算符. 如果运算符被重载为类的成员函数,那么一元运算符没有参数(但是++和--运算符的后置版本除外),二元运算符只有右侧参数,因为对象自己成了左侧参数. 运算符重载的特殊性 如果重载为成员函数,则this对象发起对它的调用 如果重载为全局函数,则第一个参数发起对它的调用 禁止用户发明该语言运算符集合中不存在的运算符 除了函数调用运算符

C++ 运算符重载

C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作.比如对象a和对象b, 那么 a+b 就需要用户自己定义它怎么相加,这时就用到了运算符重载. 运算符重载规则如下: ①. C++中的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已有的运算符. ②. 重载之后运算符的优先级和结合性都不会改变. ③. 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造.一般来说,重载的功能应当与原有功能相类似,不能改变原运算符的操作对

java怎样实现重载一个方法

重载(重新载选方法): java允许在一个类中,存在多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载,编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会产生编译时错误,这个过程被称为重载的解析 . 重载包括:普通方法的重载和构造方法的重载 方法:即函数(文中我们统称之为"方法"),是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能.而且,同时还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我

JavaScript No Overloading 函数无重载之说

在ECMAScript语言中,函数名字只不过是一个指针(可以认为是引用),下面的代码: "use strict"; function sum(a,b){ return a+b; } console.log(sum(1,2)); var sum2 = sum; sum = null; console.log(sum2(3,3)); 输出:3,6; 代码可以看出,我们定义了函数,其实函数名是一个指针,指针指向了堆内存那块这个函数的定义,我们可以把这个地址保存好几份. 我们看一下"

构造函数和析构函数是否可以被重载

构造函数可以被重载,因为构造函数可以有多个且可以带参数. 析构函数不可以被重载,因为析构函数只能有一个,且不能带参数.