重载函数

c++模板的重载与特例化

感情迁移 提交于 2019-11-29 17:14:56
//重载与模板 //函数模板可以被另一个或普通非模版函数重载,名字相同的函数必须具有不同数量或类型的参数 template < typename T > string debug_rep( const T &) { /**/ } template < typename T > string debug_rep( T * p ) { /**/ } string debug_rep( const string &) { /**/ } //编译器会先选择非模板函数版本。 debug_rep< string >( const string &) //使用模板函数 debug_rep( const string &) //使用非模板函数 //模板特例化 //一个特例化版本就是模板的一个独立的定义,在其中一个或多个模版参数被指定为特定的类型 //函数模板特例化 //当我们特例化一个函数模板时,必须为原模板中的每个模板参数都提供实参 //定义一个特例化版本时,函数参数类型必须与一个先前声明的模板中对应的类型匹配。 //使用关键字template后跟一个空尖括号,空尖括号指出我们将为原模板的所有模板参数提供实参 template < typename T > int compare( const T &, const T &); template <> int compare( const

为什么要用函数重载

泄露秘密 提交于 2019-11-29 16:53:44
函数重载 目录 1.什么是函数的重载 2.函数重载的好处 3.函数重载的注意项 什么是函数重载? 函数重载的定义:两个以上的函数,具有 相同的函数名 ,但是 形参的个数或者类型不同 ,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数 表达形式: 1.形参类型不同 2.形参个数不同 函数重载的意义 C++允许 功能相近的函数 在相同的作用域内以 相同的函数名 定义,从而形成重载,方便使用 函数重载的注意项 编译器不以形参名区分函数 编译器不以返回值区分函数 不同功能的函数设置为重载函数 当使用具有默认形参值的函数重载形式时,要注意二义性 解决方法:出现二义性的问题时,可以采用不同函数名进行区分 来源: https://www.cnblogs.com/sunny-99/p/11523038.html

Java面向对象

我只是一个虾纸丫 提交于 2019-11-29 14:50:01
Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 兔子和羊属于食草动物类,狮子和豹属于食肉动物类。 食草动物和食肉动物又是属于动物类。 所以继承需要符合的关系是:is-a,父类更通用,子类更具体。 虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。 类的继承格式 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: 类的继承格式 class 父类 { } class 子类 extends 父类 { } 为什么需要继承 接下来我们通过实例来说明这个需求。 开发动物类,其中动物分别为企鹅以及老鼠,要求如下: 企鹅:属性(姓名,id),方法(吃,睡,自我介绍) 老鼠:属性(姓名,id),方法(吃,睡,自我介绍) 继承类型 需要注意的是 Java 不支持多继承,但支持多重继承。 继承的特性 子类拥有父类非 private 的属性、方法。 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。 子类可以用自己的方式实现父类的方法。 Java 的继承是单继承,但是可以多重继承

运算符重载

こ雲淡風輕ζ 提交于 2019-11-29 14:21:47
运算符重载 1.重载 重载是指赋予新的含义 c++允许在同一作用域内的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载 函数重载: 可以让一个函数名有多重功能,在不同情况下进行不同的操作 运算符重载: 赋予同一个运算符多重不同功能 在同一作用域内可以声明多个功能类似的同名函数,但是这些函数的形参(个数、类型、顺序)必须至少有一样不同,不能是返回值不同。 2.运算符重载 并不是所有运算符都可以被重载 可重载 运算符 + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> <<= >>= == != <= >= && || ++ -- , -> () [] new new[] delete delete[] 不可重载 的运算符 sizeof :? . .* ->* :: # 重载不能改变运算符的 优先级 和 结合性 重载运算符不会改变 用法 运算符重载函数不能有 默认参数 运算符重载函数既可以作为类的 成员函数 ,也可以作为 全局函数 一般情况下,单目运算符最好重载为类的 成员函数 ,双目运算符最好重载为友员函数** 类型转换函数 只能定义为一个类的成员函数而不能定义为类的友员函数 若一个运算符的操作需要 修改对象的状态 ,选择重载为成员函数比较好 若运算符所需操作数(尤其是第一个操作数)希望有 隐式类型转换

操作符重载

亡梦爱人 提交于 2019-11-29 13:49:17
C++中,不同类型的数据有很多的运算符,如加减乘除等。当我们在定义两个不同类结构体时,我们发现,两个对象之间是不能进行这些操作的,如: #include<iostream> using namespace std; struct Point { int x, y; Point(int x = 0, int y = 0) :x(x), y(y) {}; }; ostream& operator << (ostream & out, const Point & p) { out << "(" << p.x << "," << p.y << ")"; return out; } int main() { Point a, b(1, 2); a.x = 3; cout << a + b << "\n"; return 0; } 运行结果: 所幸,C++允许用户把运算符添加到自己的类中,以方便运算 经过查阅我们发现,运算符重载分为重载为类的非成员函数与重载为成员函数,在此简略将其语法形式归为: 返回类型 operator 运算符(形参表) { 函数体 } 那么放在本代码里就是: 1 //应添加 2 Point operator +(const Point& A ,const Point& B) { 3 return Point(A.x + B.x, A.y + B.y); 4 }

C++

偶尔善良 提交于 2019-11-29 12:37:00
函数重载(静多态) 函数重载的命名规则 函数重载的调用规则 函数重载的原理 倾轧(mangling) 函数默认参数 默认参数的定义规则 默认参数的使用规则 引用 引用的特性 date: 2019-9-13 title: 函数重载(静多态) 函数重载的命名规则 通过判断函数形参的类型、个数和顺序来区分多个相同函数名的函数 函数的返回值类型,不是区分函数重载的条件 函数重载的调用规则 参数类型符合时,严格按照上述要求调用 参数类型不符合时,编译系统会对参数进行隐式转换后,寻找对应的重载函数。 隐式转换的原则:低精度数据会自动转成高精度数据后,寻找对应的重载函数,如上述条件不满足,无高精度参数的函数,则会降低精度进行转换,此时可能会出现函数调用的歧义(ambiguous)现象,如数据为 int类型,但是重载函数参数只有double和float类型,或者数据为double类型,但是重载函数只有int和float类型的,再或者是,数据为long int,但是 重载数据只有int,double, float类型的。 因此总结,若函数重载时涉及参数隐式类型转换的,同时数据为高精度向低精度转换,则极有可能会出现歧义,编译器可能将其转换为任意一种低精度的数据。 函数重载的原理 倾轧(mangling) 倾轧的本质就是对函数的重命名 倾轧技术发生在两个阶段,.cpp编译阶段,和.h的声明阶段

C++的使用小教程5——类的重载

这一生的挚爱 提交于 2019-11-29 11:48:30
C++的使用小教程5——类的重载 1、类的重载是什么 2、函数的重载 3、运算符的重载 学习好幸苦。 1、类的重载是什么 C++的重载分为两类,一个是函数的重载,一个是运算符的重载,重载的意思就是允许在一个作用域内对函数或者运算符指定多个定义,以实现不同的功能。 其中函数的重载是, 在同一个作用域内,可以声明与定义几个名字相同的函数,但是其形式参数不同(不同包括形式参数类型、多少、顺序等等),但是必须注意的是不能仅通过返回类型的不同来重载函数。 其中运算符的重载是,这里用一个例子来说明,**假设我们定义了一个int a = 5,int b = 10;此时调用int c = a + b;得到c = 15。**但是对于我们自己定义的class而言,比如class Box, 那么box3 = box1 + box2;是什么意思呢?这就是运算符的重载需要定义的。 2、函数的重载 在同一个作用域内,可以声明与定义几个名字相同的函数,但是其形式参数不同(不同包括形式参数类型、多少、顺序等等),但是必须注意的是不能仅通过返回类型的不同来重载函数。 在接下来的举例中,我将通过打印字符串实现函数的重载。 # include <iostream> # include <string> using namespace std ; class printExample { public : void

第一次作业:C++ 函数重载

三世轮回 提交于 2019-11-29 10:29:08
函数重载 函数重载是在C语言的学习中未涉及的新概念。我们在编程时经常会遇到这样一个问题:我们编写完一个函数准备准备调用时,一旦需要传入不同的数据类型的参数时,一个函数无法实现,我们又必须重写另一个或者多个命名不用的功能近似的函数才能实现其操作,但是显然,对于实现相同功能传入不同的数据类型参数却需要调用不同名的函数,这增加了无谓的难度。这时,函数重载提供给了我们一个解决方法. (1)定义:两个或者以上的具有相同函数名,但是形参类型或者个数不同,编译器会根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。 有了函数重载之后,我们在函数功能近似但函数参数不同的情况下,无须对函数命名不同的名字,编译器会自动匹配。 例如对x+y函数功能的实现: #include<iostream> using namespace std; int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } int main() { int a, b; double c, d; cout << "输入两个int值" << endl; cin >> a >> b; cout << "输入两个double值" << endl; cin >> c >> d; cout << "int值的和为" <

C# 中关于重载与重写的区别及用法

陌路散爱 提交于 2019-11-29 02:05:01
1、 重载(overload) : 在同一个作用域(一般指一个类)的两个或多个方法函数名相同,参数列表不同的方法叫做重载,它们有三个特点(俗称两必须一可以): 方法名必须相同 参数列表必须不相同 返回值类型可以不相同 例如: public void Sleep() { Console.WriteLine("Animal睡觉"); } public int Sleep(int time) { Console.WriteLine("Animal{0}点睡觉", time); return time; } 2、 重写(override) :子类中为满足自己的需要来重复定义某个方法的不同实现,需要用 override 关键字,被重写的方法必须是虚方法,用的是 virtual 关键字。它的特点是(三个相同): 相同的方法名 相同的参数列表 相同的返回值 如:父类中的定义: public virtual void EatFood() { Console.WriteLine("Animal吃东西"); } 子类中的定义: public override void EatFood() { Console.WriteLine("Cat吃东西"); } 来源: https://www.cnblogs.com/zjbd/p/11439315.html

C++基础--函数重载

寵の児 提交于 2019-11-29 01:43:39
函数重载定义:   在相同的作用域中具有相同的函数名而 函数形参列表(参数类型、参数个数、参数顺序)不同 的两个函数,称之为函数重载。注意:函数返回值类型并不是重载的条件。 函数重载优点:   可以使用相同的函数名   有助于理解和调试代码   易于代码维护 int testFunction(int a, int b) { return (a>b?a:b); } double testFunction(double a, double b) { return (a>b?a:b); } void testFunction(int a, int b, int c) { cout<<"TestFunction"<<endl; } 来源: https://www.cnblogs.com/slwang-27921804/p/11438085.html