重载函数

C++重载操作符

久未见 提交于 2019-12-02 12:14:54
1.重载操作符的必要性 C++的数据类型分为 基础数据类型 和 构造数据类型 ,基础数据类型客户直接完成算数运算,但是比如类这样的新构造的数据类型是无法通过基本运算符进行算数运算的。此时,便需要重载操作符。 2.形式和规则 大多数的重载运算符可被定义为 普通的非成员函数 或者被定义为 类成员函数 。 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。 Box operator + ( const Box & ) ; 如果我们定义上面的函数为类的非成员函数,那么我们需要为每次操作传递两个参数,如下所示: Box operator + ( const Box & , const Box & ) ; 2.1一元运算符 只对一个操作数进行操作,这里包括: 一元减运算符,即负号( - );递增运算符( ++ )和递减运算符( – ) 递增运算符包括前置和后置两种情况,区别如下: 前置++:即++运算符位于操作数的前面,例如:++i; 后置++:即++运算符位于操作数后面,例如:i++; 1、前置++重载时没有参数,而后置++重载时有参数。不会使用其参数,仅仅是区分用。 2、前置++需要返回引用,因为重载自加运算符后可以返回对象的引用, 以方便在表达式中连续使用。而后置++返回的不是引用

C++第五次作业

不羁的心 提交于 2019-12-02 11:48:30
多态性 一、运算符重载 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为。 1、运算符重载的规则 (1)C++种的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已经有的运算符。 (2)重载之后的运算符的优先级和结核性都不会改变。 (3)运算符重载时针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。 C++标准规定,有些操作符是不能重载的,它们是类属关系运算符"."、成员指针运算符".*"、作用域分辨符"::"和三目运算符"?:"。 前面两个运算符保证了C++中访问成员功能的含义不被改变。作用域分辨符的操作是类型,而不是普通的表达式,也不具备重载的特征。 运算符的重载形式: 返回类型 operator 运算符(形参表) {   函数体 } 重载为类的成员函数和重载为非成员函数的声明方式不同。 2、运算符重载的实例 对类Point重载“++”(自增)、“--”(自减)“、运算符,要求同时重载前缀和后缀的形式 #include <iostream> using namespace std; class Point { public: Point(int xx = 0, int yy = 0):x(xx),y(yy){}

C++ 第五次作业 重载与多态

安稳与你 提交于 2019-12-02 11:44:25
重载与多态 一、教学目标 熟练了解并掌握重载和多态的相关概念,进而在平时应用到,并且能了解其中的思想和过程 二、教学过程 (一)定义 多态是指同样的消息被不同类型的对象接收时导致的不同的行为,消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。。 C++支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其中 主要的方式。 (二)多态的类型 面向对象的多态性可以分为4类:重载多态,强制多态,包含多态和参数多态,前面两种称为专用多态,后面两种称为通用多态。 (三)多态的实现 分为两类:编译时的多态和运行时的多态。 (四)具体应用: 1.运算符重载: 运算符重载就是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为。 运算符重载的本质就是函数重载。 注:运算符重载为类型的成员函数时,函数的参数个数比原来的操作个数要少一个;(后置++;- -除外) 重载为非成员函数时,个数相同。 举例:定义计数器 Counter 类,对其重载运算符 + typedef unsigned short USHORT; #include <iostream.h> class Counter { public: Counter(); Counter(USHORT initialValue); Counter(){} USHORT

C++多态性总结

放肆的年华 提交于 2019-12-02 11:30:01
一,C++多态性概述 多态是指同样的消息被不同类型的对象接受时导致不同的行为。所谓消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就调用不同的函数。换言之,多态指的就是用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。 二,多态性分类 面向对象的多态性可以分为4类:重载多态,强制多态,包含多态,参数多态。前面两种统称专用多态,后面两种统称通用多态。 三,各种多态举例说明 1,重载多态: 重载多态包括前面学过的普通函数及类的成员函数的重载还有运算符的重载。 普通函数重载举例: int add(int x, int y) { return x + y; } double add(double x, double y) { return x + y; } float add(float x, float y) { return x + y; } 类的成员函数相当于函数在类的内部实现重载,在这儿就不详细说明了,跟普通函数重载大同小异。 下面重点介绍运算符号重载: 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同的行为。 运算符重载可以分为重载为成员函数以及重载为非成员函数两种。 重载为成员函数: 其一般语法形式为: 返回类型 operator 运算符(形参表) { 函数体 } 例1:(单目运算符)实现复数类前置++,后置+

多态性

泪湿孤枕 提交于 2019-12-02 10:59:24
多态性 多态性概述 多态是指同样的消息被不同类型的对象接收时导致不同的行为。 消息:对类的成员函数的调用 行为:实现,也就是调用了不同的函数 例如:使用同样的加号"+",就可以实现整型数之间、浮点数之间、双精度浮点数之间的加法,以及这几种数据类型混合的加法运算。 同样的消息:相加 被不同类型的对象:变量 不同的行为:不同类型的变量采用不同的方式进行加法的运算 多态的类型 分为4类:重载多态、强制多态、包含多态和参数多态 多态的实现 在编译的过程中确定了同名操作的具体操作对象的多态叫做 静态多态或编译时的多态 在编译的过程中无法确定,而在程序运行的过程中才能动态地确定操作所针对的具体对象的多态叫做 动态多态或运行时的多态 运算符重载 该部分用来介绍如何通过运算符重载来扩充运算符的作用 运算符的重载形式有两种,即重载为类的非静态成员函数和重载为非成员函数。运算符重载为类的成员函数的 一般语法形式为: 返回类型 operator运算符(形参表) { 函数体 } 运算符重载为非成员函数的一般语法形式为同上 以实现自定义数据类型复数的相加减为例 #include<iostream> using namespace std; class Complex { //复数类定义 public: //外部接口 Complex(double r=0.0,double i=0.0):real(r)

重载与多态

孤街浪徒 提交于 2019-12-02 10:57:40
一、概念 重载:函数名相同,但是函数参数不同。调用时根据参数的不同决定调用哪一个函数 多态:函数名相同,函数形参也相同。调用时根据函数类型是虚函数还是普通成员函数决定调用哪一个 重写:若子类和父类的某个函数具有相同的函数名,相同的形参列表,且父类中的函数被定义为虚函数,则子类对该函数的实现被称为函数的重写 二、重载 1.函数重载 2.运算符重载 其语法形式为: 返回类型 operator 运算符(形参表) { 函数体 } 仿照该语法形式重载“++”运算符 1 Point operator +(const Point& A ,const Point& B) { 2 return Point(A.x + B.x, A.y + B.y); 3 } 该重载运算符的作用是让A,B中的x,y相加,放入程序中运行: 来源: https://www.cnblogs.com/jianW1024/p/11742344.html

重载和多态

江枫思渺然 提交于 2019-12-02 09:51:37
重载与多态 重载与多态与重写的区别: 重载 : 函数名相同,但是函数的参数不同,调用时根据参数的不同决定调用哪一个函数。 多态 : 函数名相同,函数形参相同。调用时根据函数类型时虚函数还是普通函数决定调用哪一个。 重写 : 若子类和父类的某个函数具有相同的函数名,相同的形参列表,且父类中的函数被定义为虚函数,则子类对该函数的实现被称为函数的重写。 caution! 若函数不声明为虚函数,只能通过类名限定名的方式访问父类或者子类的方法。这叫做隐藏。 若函数声明为虚函数,则可以通过指针访问每一个方法,这叫做覆盖。 接下来,让我们分别对以上的概念进行实现: 一.重载 1.函数重载 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。 如下例子: #include <iostream> using namespace std; class printData { public: void print(int i) { cout << "整数为: " << i << endl; } void print(double f) { cout << "浮点数为: " << f << endl; } void print(char c[]) { cout << "字符串为: " << c <<

C++函数重定义、重载、重写的区别

喜你入骨 提交于 2019-12-02 08:08:29
1. 重写 (override): 父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数。 (1) 被重写的函数不能是 static 的。必须是 virtual 的 ( 即函数在最原始的基类中被声明为 virtual ) 。 (2) 重写函数必须有相同的类型,名称和参数列表 (即相同的函数原型) (3) 重写函数的访问修饰符可以不同。尽管 virtual 是 private 的,派生类中重写改写为 public,protected 也是可以的 2. 重载 (overload): 指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。 3. 重定义 (redefining): 子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。 重写与重载的区别 (override) PK (overload) 1、方法的重写是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关 系,是水平关系。 2、重写要求参数列表相同;重载要求参数列表不同。 3、重写关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的。 注意:在 C++ 中若基类中有一个函数名被重载,在子类中重定义该函数,则基类的所有 版本将被隐藏——即子类只能用子类定义的,基类的不再可用。—

就个人银行账户管理程序谈谈C++和Java的异同

不问归期 提交于 2019-12-01 20:35:18
4_9 同: Java和C++都是面向对象的语言。都有数据成员,方法,访问权限的概念。 异: 访问权限上, 非private时Java的默认访问权限是包 。而 C++的默认访问权限是private 。Java中: 访问权限首先看类前的修饰符 ,当类的修饰符为public时, 则类可以被所有的类所访问(可以import),当为默认时, 则只能为包中的类所访问。在此前提下, 再看属性和方法前的修饰符 。类前修饰符为public时,当属性和方法前的修饰符为public时,则该属性可以被所有类访问;当属性和方法前为protected修饰时,对于类定义而言,可以被同包中的类和所有子类访问(子类和父类可以不在同一个包中),也就是B+C范围,但对于对象而言,只能被同一个包的类对象所访问,也就是B的范围;当为默认时,只能被同包中的类所访问(比protected访问权限小);当为private时,只能被本类内部所访问 。 声明访问权限时,C++可以用冒号统一声明,而Java则不行,得一一列举。 Java调用非静态方法和非静态数据成员时,是 用对象引用调用的 ,每个对象引用都需要先new一下,指向对象空间。而 C++是用对象实例调用 非静态方法和非静态数据成员的。 Java都是一个类为单元, 方法和主函数都写在类里面 。C++则可以 先声明一个类,再在外面具体实现, 必须有main函数为入口执行。

js中的函数重载

痞子三分冷 提交于 2019-12-01 19:06:57
函数重载与js 什么是函数重载 重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的 形式参数 (指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。 与之相似的函数重写 函数重写,也被称为覆盖,是指子类重新定义父类中有相同名称和参数的虚函数,主要在继承关系中出现。 函数重载基本条件 函数名必须相同; 函数参数必须不相同,可以是参数类型或者参数个数不同; 函数返回值可以相同,也可以不相同。(如果函数的名称和参数完全相同,仅仅是返回值类型不同,是无法进行函数重载的。) 函数重载应用场景 同一场景下,对于函数功能相同,仅仅参数不同的情况下进行重载,可减少开发的重复命名等情况 javascript 中的函数重载 javascript 中没有真正意义上的函数重载,因为 javascript 中同一作用域下的同名函数,前者会被后者覆盖,但是可通过其他方法间接实现重载同样的效果,javascript中的函数没有签名,它的参数是由包含零的多个数组来表示的。无函数签名的话重载是不可能做到的 但是我们可以简介方法实现重载效果,使用 arguments 对象 ,是函数内部的一个类数组对象,它里面保存着调用函数时