重载函数

C++技巧之operator操作符

一世执手 提交于 2019-12-03 20:37:09
C++有时它的确是个耐玩的东东。operator它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换)。 1.operator overloading C++可以通过operator 重载操作符,格式如下:类型T operator 操作符 (),如比重载+,如下所示 template<typename T> class A { public: const T operator + (const T& rhs) { return this->m_ + rhs; } private: T m_; }; 又比如 STL中的函数对象,重载(),这是C++中较推荐的写法 ,功能与函数指针类似 ,如下所示 template<typename T> struct A { T operator()(const T& lhs, const T& rhs){ return lhs-rhs;} }; 2 operator casting C++可以通过operator 重载隐式转换,格式如下: operator 类型T (),如下所示 class A { public: operator B* () { return this->b_;} operator const B* () const {return this->b_;}

Java常考面试题(二)(转)

只愿长相守 提交于 2019-12-03 20:24:47
      序言          昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了。就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的 面试题 ,试着用自己的话说出来,看会不会,不会的话就继续看看,理解理解。                                                                                   ------WZY 一、Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?         自己解答:             覆盖:又称作重写, 前提条件:继承。 子类将父类中的某个方法,原封不动的抄下来,方法体中就自己写                    注意:子类重写父类的方法,访问修饰符的权限不能低于父类方法的访问修饰符, 其它返回值、方法名、参数,必须一样。             重载:不需要继承,在自己类中,和自己本类中的某个方法名相同,参数不同,其他没有限制, 这就是方法的重载。         参考答案:               Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法

高精度模板 支持各种运算 c++

江枫思渺然 提交于 2019-12-03 12:23:32
绪言 自从有了高精度模板,妈妈再也不用怕我不会打高精度了! 代码 代码长度与日俱增啊~~~ 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 using namespace std; 6 7 bool insigma(char ch){ 8 return ch=='-'||('0'<=ch&&ch<='9'); 9 } 10 11 const int maxn = 1000; 12 struct number{ 13 int num[maxn]; 14 int len; 15 bool fu; 16 17 number(){//初始化 18 len=fu=0; 19 memset(num,0,sizeof(num)); 20 } 21 22 int updata_len(){//更新长度 23 for(int i=maxn-1;i>=0;i--) if(num[i]) return len=i+1; 24 return len=0; 25 } 26 27 // /* 28 number operator= (int x){//隐式转换 29 fu=(x<0); 30 num[0]=abs(x); 31 if(x>9) carry_bit(); 32 if(x<-9)

第9课.函数重载分析(下)

戏子无情 提交于 2019-12-03 09:53:42
1.重载与指针 typedef int (*PFUNC)(int a); int c = 0; PFUNC p = func; c = p(1); //which function to call 第一个 函数重载遇上函数指针 将重载函数名赋值给函数指针时 a.根据重载规则挑选与函数指针参数列表一直的候选者 b. 严格匹配 候选者和 函数类型 与函数指针的函数类型。(不单单是函数名和参数列表来决定了) 注意 a.函数重载 必然发生在同一个作用域中 (c语言只有一个作用域:全局作用域;c++中不只一个作用域,还有类作用域,在其中都可以定于函数。你不可能这个作用域去调用另外一个作用域中的函数) 2.c++和c相互调用 === c++直接编译c语言的源码是没有问题的,但是在工程中有些c代码已经不是源码了,已经被编译成了目标文件。即我们在工程中用到第三方的库,这些库是用c语言进行编译的。让c++也能够去编写c语言编译的库。 a.目的是编译器能够兼容c语言的编译方式 b.extern关键字能强制让c++编译器进行c方式的编译 extern "C" { //do C-style compilation here } 问题:如何保证一段c代码只会以c的方式被编译? __cplusplus是c++编译器内置的标准红定义。意义:确保c代码以统一的c方式被编译成目标文件。 #ifdef _

第8课.函数重载分析(上)

久未见 提交于 2019-12-03 09:25:17
1.函数重载 a.用同一个函数名定义不同的函数 b.当函数名和不同的参数搭配函数的含义不同 int func(int x) { return x; } int func(int a, int b) { return a + b; } int func(const char *s) { return strlen(s); } 2.函数重载至少满足下面的一个条件 a.参数个数不同 b.参数类型不同 c.参数顺序不同 3.当函数默认参数遇到函数重载会发生什么 int func(int a,int b, int c = 0) { return a * b * c; } int func(int a, int b) { reutrn a + b; } int main() { int c = func(1, 2) //which one? return 0; } 不知道去调用那个函数 4.编译器调用重载函数的准则 5.函数重载的注意事项 a.重载函数在 本质 上是 相互独立 的 不同 函数(即函数是不同函数,只不过他们的名字恰好相同而已。函数的入口地址是不同的(下面证明),也跟加说明他们是互相独立的不同函数) b.重载函数的 函数类型不同 。(函数类型是由函数的返回类型和函数的参数类型一起构成) c.函数返回值不能作为函数重载的依据 d.函数重载是由 函数名 和 参数列表 共同决定的。

关于重载运算符

感情迁移 提交于 2019-12-03 07:18:38
关于C++中的重载运算符 学习博客1 学习博客2 我们可以重定义或重载 \(C++\) 内的大部分内置运算符。 可以重载的运算符: - * / % ^ ! = < > += ^= &= |= << >> <= >= && || ++ [] () new delete new[] 不能重载的运算符 . :: .* ?: sizeof \(\color{red}{重载的运算符是带有特殊名称的函数,函数名是由关键字operator和其后要重载的运算符符号构成的。 }\) 与其他函数一样,重载运算符有一个返回类型和参数列表 Node operator<(const Node &n); 声明把小于号这个运算符用于把两个 \(Node\) 对象比较大小,返回最终的 \(Node\) 对象。 识储备(主要是概念): 成员函数:假设我们定义一个结构体 \(stuendt\) ,这个结构体里有 \(age,score\) 等,而这个 \(age,score\) 就是成员函数(个人理解,如果有误欢迎指正) 大多数的重载运算符可以被定义为普通的非成员函数(就是我们平时写的各种函数)或者被定义为类成员函数。 如果我们定义上面的函数为类的非成员函数,很明显的,由于要比较所以我们需要穿两个参数给他。 Node operator<(const Node a,const Node b)

C++对bool operator < (const p &a)const的运算符重载详解

让人想犯罪 __ 提交于 2019-12-03 06:22:53
struct node { //定义一个结构体node(节点) int x; int y; int len; //node中有3个成员变量x,y,len bool operator <(const node &a)const {//重载<操作符。可以对两个node使用<操作符进行比较 return len<a.len; } }; 括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改! Return Top 重载运算符的介绍 C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。   运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下: <返回类型说明符> operator <运算符符号>(<参数表>) { <函数体> }  运算符重载时要遵循以下规则: (1) 除了类属关系运算符"."、成员指针运算符".*"、作用域运算符

Python函数重载机制?

一世执手 提交于 2019-12-03 04:34:47
首先,什么叫重载? 重载主要是为了解决两个问题。 1。可变参数类型。 2。可变参数个数。 另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。 对于情况 1 ,函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 python 中很可能是相同的代码,没有必要做成两个不同函数。 那么对于情况 2 ,函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。 所以python 自然就不需要函数重载了。 来源: https://www.cnblogs.com/wenm1128/p/11671526.html

重写与重载的区别

爷,独闯天下 提交于 2019-12-03 04:00:42
1、定义上不同。重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同, 调用的时候根据函数的参数来区别不同的函数。重写是指在派生类中重新对基类中的虚函数重新实现, 即函数名和参数都一样,只是函数的实现体不一样。 2、规则不同。重载必须具有不同的参数列表,可以有不同的访问修饰符,可以抛出不同的异常。 重写的参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载,其返回的类型也必须一直与被重写的方法的返回类型相同。 重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。 来源: https://www.cnblogs.com/zhang111/p/11776051.html

Scala-隐式转换-私有函数-重载-构造器

倾然丶 夕夏残阳落幕 提交于 2019-12-03 03:43:43
package com.zhu.scala /** * Created by zhuhailong-dc on 2017/3/3. * * Scala编译器将把你放在类内部的任何不是字段的部分或者方法定义的代码,编译进主构造器中 * 1.先决条件 * 2.函数重载 * 3.操作符重载 * 4.私有函数 * 5.隐式转换 */ class Rational(n:Int,d:Int){ //先决条件使用 require require(d!=0) require(n!=1) //在初始化Rational对象的时候执行 //println("created "+n+"/"+d) //重载toString函数 override def toString = n+"/"+d //添加字段 val number:Int=n val denom:Int=d def add(that:Rational):Rational={ println(n) println(d) new Rational(number*that.denom+that.number*denom,denom*that.denom) } def lessThan(that:Rational)=this.number*that.denom<that.number*this.denom def max(that:Rational)