重载函数

PHP 成员重载与实战

人盡茶涼 提交于 2020-01-25 18:18:49
一、静态成员 应用场景: 1、如果一个对象,我们仅仅只用一次,还有必要创建对象吗, 直接将类看成对象,岂不是更方便 2、如果多个对象之间, 需要共享一些属性和方法, 而他们必须通过一个个独立对象调用的,无法共享,怎么办? 这时候使用静态成员就能解决。 成员分为:成员可分为类成员和实例成员,成员又包含属性和方法 实例属性定义 : public $product; 初始化用构造函数 实例方法定义 : public function getInfo1(){} 静态属性定义 : public static $price; 可以在构造函数中进行初始化,但不建议,最好是定义时进行初始化。访问: 用类直接访问,例如双冒号[范围解析符] echo Demo::$price; 静态方法定义 : public static function getInfo2(){} 二、常量 类常量定义: const 常量名=常量值; 普通常量定义: define('常量名','常量值'); 变量 和 普通常量 的区别: 变量是有作用域限制,通过 _GLOBAL数组 输出;普通常量是是全局的,无作用域的限制但受命名空间限制,可以直接输出。 类常量 和 普通常量 的区别: 声明的方式不同:类常量用const;普通常量可以const也可以define,一般用define,因为define灵活点允许值是一个表达式(abc

C++课程学习笔记第四周:运算符的重载

六眼飞鱼酱① 提交于 2020-01-25 17:55:12
1 运算符重载基本概念和形式 1.1 运算符重载基本概念 在数学上,两个复数可以直接进行+、-等运算。但在C++中,直接将+或-用于复数对象是不允许的,因为C++中预定义的运算符并未提供这种功能。 为了让对象也能通过运算符进行运算(这样代码更简洁,容易理解),C++提供了运算符重载的机制。 运算符重载的含义:对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。比如 5 + 4 = 9; complex_a + complex_b 生成新的复数对象。 运算符重载的目的:扩展C++中提供的运算符的适用范围,使之能作用于对象。 1.2 运算符重载的形式 返回值类型 operator 运算符(形参表){ …… } 运算符重载的实质是函数重载; 把含运算符的表达式转换成对运算符函数的调用,把运算符的操作数转换成运算符函数的参数; 运算符被多次重载时,根据实参的类型决定调用哪个运算符函数。 可以重载为普通函数,也可以重载为成员函数; 重载为成员函数时,参数个数为运算符目数减一;重载为普通函数时参数个数为运算符目数。 //示例 class Complex{ public: double real,imag; Complex( double r = 0.0, double i= 0.0 ):real(r),imag(i) { }

JavaOOP继承

本秂侑毒 提交于 2020-01-25 00:00:40
一.继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 eg: 兔子和羊属于食草动物类,狮子和豹属于食肉动物类。 食草动物和食肉动物又是属于动物类。 所以继承需要符合的关系是:is-a,父类更通用,子类更具体。 虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。 类的继承语法 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: class 父类 { } class 子类 extends 父类 { } eg: //动物父类 public class Animal { private String name; private int id; public Animal(String myName, int myid) { name = myName; id = myid; } public void eat(){ System.out.println(name+"正在吃"); } public void sleep(){ System.out.println(name+"正在睡"); } public void

使用函数指针解决函数重载二义性调用问题

孤街浪徒 提交于 2020-01-22 17:58:09
当实参对应重载函数的多个可行函数,且每个可行函数各自在一个实参上实现了更好的匹配时,编译器会因为程序具有二义性而报错。 例如: #include<iostream> using std::string; using std::cout; using std::cin; using std::endl; void ff(int, int) {//重载函数1 cout << "f1" << endl; } void ff(double, double = 3.14) {//重载函数2 cout << "f2" << endl; } int main() { ff(2, 3.4);//第一个实参更加匹配函数1,第二个实参更加匹配函数2 return 0; } 此时编译器会报告有多个重载函数“ff”的实例与参数列表匹配。 可知这种函数重载方式本身不是特别合理。 但是如果我们非要使用这种具有二义性的实参该怎么办呢? 可以通过函数指针来指向想要调用的函数,能够避免二义性的产生。 #include<iostream> using std::string; using std::cout; using std::cin; using std::endl; void ff(int, int) { cout << "f1" << endl; } void ff(double, double = 3

type traits用法 针对整数类型的弹性重载

末鹿安然 提交于 2020-01-22 09:19:30
对于同样的函数,如果要区别于整数类型提供重载,将各种类型的参数的重载函数都重载一遍不太现实,可以采用调用type traits的方法,实现重载 例如: template void foo_iml(T val,true_type); template void foo_iml(T val,false_type); template void foo(T val) { foo_impl(val,std::is_integral()); } 通过这种方式,所有非整形的情况都会匹配第二模板。 来源: CSDN 作者: 专注云吸猫开发 链接: https://blog.csdn.net/conggai1647/article/details/103897389

C++中构造函数,拷贝构造函数和赋值函数的区别和实现

不羁的心 提交于 2020-01-22 00:59:57
C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法。下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存。(构造函数的命名必须和类名完全相同) 首先说一下一个C++的空类,编译器会加入哪些默认的成员函数 ·默认构造函数和拷贝构造函数 ·析构函数 ·赋值函数(赋值运算符) ·取值函数 **即使程序没定义任何成员,编译器也会插入以上的函数! 注意:构造函数可以被重载,可以多个,可以带参数; 析构函数只有一个,不能被重载,不带参数 而默认构造函数没有参数,它什么也不做。当没有重载无参构造函数时, A a就是通过默认构造函数来创建一个对象 下面代码为构造函数重载的实现 <span style="font-size:14px;">class A { int m_i; Public: A() { Cout<<”无参构造函数”<<endl; } A(int i):m_i(i) {} //初始化列表 }</span> 2.拷贝构造函数 拷贝构造函数是C++独有的,它是一种特殊的构造函数,用基于同一类的一个对象构造和初始化另一个对象。 当没有重载拷贝构造函数时,通过默认拷贝构造函数来创建一个对象 A a; A b(a); A b=a;

12.方法重载overload

一个人想着一个人 提交于 2020-01-21 17:52:26
方法重载:overload 重载就是在一个类中,有相同的函数名称,但形参不同的函数 方法重载的规则:    方法名称必须相同    参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)    方法的返回值类型可以相同也可以不同   仅仅返回类型不同不足以成为方法的重载 实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。 可以让我们的程序更加清晰易读,他可以执行一些跟这个名字相关的一些参数 1 package com.duan.method; 2 3 public class Demo02 { 4 public static void main(String[] args) { 5 6 int lager = max(10, 20); 7 System.out.println(lager); 8 9 double max = max(10.0, 20.0); 10 System.out.println(max); 11 12 } 13 14 //比大小 15 public static int max(int num1, int num2) { 16 17 int result = 0;//需要初始化 18 19 if (num1 == num2) { 20 System.out.println(

为什么Go语言不支持重载?

 ̄綄美尐妖づ 提交于 2020-01-21 04:01:45
上图是Golang官网FAQ的部分截图,看来关于Go不支持重载的这个问题困扰了很多从面向对象语言转到Go的开发者。官方在这里做出了解答。 在上面的回答中有这样一句话: Experience with other languages told us that having a variety of methods with the same name but different signatures was occasionally useful but that it could also be confusing and fragile in practice. 其意思是: 使用其他语言的经验告诉我们,使用具有相同名称但签名不同的多种方法有时会很有用,但在实践中也可能会造成混淆和脆弱。 接下来又说: 在Go的类型系统中,仅按名称进行匹配并要求类型一致是一个简化的主要决定。 最后一句话: 关于操作员重载,似乎比绝对要求更方便。 同样,没有它,事情会变得更简单。 整个的解答非常漂亮、简洁。我们看完之后就会理解,Go语言的设计者之所以没有在Go中实现方法的重载,并没有复杂的理由,核心原则就是: 让Go保持足够的简单。 这也能看出来Go语言的设计者有着极大的选择和克制。 其实,笔者认为重载在本质上并没有很大的实际意义。只是表现力和表现形式上有一定的差别

C++-Record14—函数重载及和指针在一起使用的情况(C++对C的扩展)

倾然丶 夕夏残阳落幕 提交于 2020-01-20 12:42:21
目录 函数重载基础 函数重载概念 函数重载的判断标准 函数重载举例 函数重载的调用准则 函数重载的注意事项 函数重载与函数指针结合的情况 总体代码 函数重载应用场景比较多,后面的类的调用中,几乎都会用到。 函数重载基础 函数重载概念 函数重载(Function Overload):用同一个函数名定义不同的函数,当函数名和不同的参数搭配时函数的含义不同。 先举个例子: int func(int x) { return x; } int func(int a, int b) { return a + b; } int func(const char* s) { return strlen(s); } 以上三个函数的函数名称都是,func,但输入的参数个数、类型都不相同, 那这几个函数,就是函数重载。 函数重载的判断标准 函数重载至少满足下面的一个条件: 参数 个数 不同 参数 类型 不同 参数 顺序 不同 这里需要强调的是: 函数返回值不是函数重载的判断标准!!! 函数重载举例 void myPrint(int a) { printf("a:%d \n", a); } void myPrint(char *p) { printf("%s \n", p); } void myPrint(int a, int b) { printf("a:%d ", a); printf("b:%d \n

java笔记之方法

旧街凉风 提交于 2020-01-19 06:05:03
一、那么什么是方法呢? 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 二、方法的优点 1. 使程序变得更简短而清晰。 2. 有利于程序维护。 3. 可以提高程序开发的效率。 4. 提高了代码的重用性。 三、方法的定义 修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; } 方法包含一个方法头和一个方法体。下面是一个方法的所有部分: 修饰符: 修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。 返回值类型 : 方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字 void 。 方法名: 是方法的实际名称。方法名和参数表共同构成方法签名。 参数类型: 参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。 方法体: 方法体包含具体的语句,定义该方法的功能。         四、方法的小实例 1 public class MethodTest { 2 /** 3 * @param args 4 *