重载函数

c++函数重载

感情迁移 提交于 2019-12-03 01:34:51
C++语言支持函数重载 实现原理: 名字改编(name mangling) 具体步骤: 当函数名称相同时,会根据 函数参数的类型、个数、顺序进行改编 对源码直接用C++编译器进行编译时,会按C++方式进行调用 对于C源码不希望按C++方式进行调用(不进行名字改编), 按C的方式进行调用 C的代码要放在C++中运行(C与C++混合编程) #ifdef __cplusplus //该宏只会在C++的编译器中定义 extern "C" { //都会用C的方式进行调用 #endif int add(int x, int y) {   return x + y; } #ifdef __cplusplus }//end of extern "C" #endif int add(int x, int y, int z) {   return x + y + z; } double add(double x, double y) {   return x + y; } double add(int x, double y) {   return x + y; } double add(double x, int y) {   return x + y; } 来源: https://www.cnblogs.com/Davirain/p/11769399.html

Override和Overload的含义去区别

匿名 (未验证) 提交于 2019-12-03 00:39:02
java中的继承,方法覆盖(重写)override与方法的重载overload的区别 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。 重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding) 。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同的参数次序,则称为方法的重载(Overloading)。不能通过访问权限、返回类型、抛出的异常进行重载。 1. Override 特点 1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果; 2、覆盖的方法的返回值必须和被覆盖的方法的返回一致; 3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类; 4、方法被定义为final不能被重写。 5、对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重写覆盖,如果定义的话,也只是定义了一个新方法,而不会达到重写覆盖的效果。(通常存在于父类和子类之间。) 2.Overload 特点 1

【c++】c++中重载输出操作符,为什么要返回引用

匿名 (未验证) 提交于 2019-12-03 00:38:01
针对:ostream & operator <<(ostream & os, const ClassType &object) 说明几点: 1.第一个形参为对ostream对象的引用,在该对象上将产生输出,ostream为非const,因为写入到流会改变流的状态;该形参是一个引用,因为不能复制ostream对象(在c++中定义的标准输入输出流类istream和ostream,其中拷贝构造函数和赋值操作符函数都被放置在了private部分,且只有声明,没有定义)。 2.第二个形参一般应是对要输出的类类型的引用,该形参是一个引用以避免复制实参,减少一次拷贝;它设为const,因为输出一般不会改变该对象,设为const就可以用来输出const对象和非const对象。 3.返回类型是一个ostream引用,它的值通常是输出操作符所操作的ostream对象,首先因为ostream对象不能复制,所以必须是引用;其次引用可以少一次拷贝,提高效率;最后,为了体现连续性,实现连续输出,达到用多个输出操作符操作一个ostream对象的效果,如果不是引用,程序返回的时候就会生成新的临时对象,也就是说,连续的两个<<操作符实际上是针对不同对象的,这就好比cout<<a<<b;与cout<<a;cout<<b;的区别。 PS: 重载赋值操作符,连续赋值可以不返回引用 重载加法操作符,连续相加不能返回引用

C++:重载操作符 &amp; 赋值操作符重载需要注意的问题

匿名 (未验证) 提交于 2019-12-03 00:38:01
一、操作符重载 1.什么是操作符重载 就是把一些操作符通过关键字operator,组装成一个函数,关键字operator后面接需要重载的操作符符号 2.为什么需要重载操作符? (1)简单、方便,比起封装一个函数,使用operator比较形象直观 (2)可以提高代码的可读性 (3)为了处理自定义类型和内置类型之间的运算 3.操作符重载的格式 函数的返回类型 operator 操作符(参数列表) 例如: int operator =( int a, int b); ps:操作符重载也是一个函数,具有返回值和参数,此函数的形参个数与操作符的操作数目相关,例如 ‘+’ 是双目操作符,也就是说 ’+‘ 是有两个参数的,那重载’+‘时,就需要两个参数。 4.不能被重载的操作符 ( 1 ). //成员选择符 ( 2 ).* //成员对象选择符 ( 3 ):: //域解析操作符 ( 4 )?: //条件操作符 ( 5 ) sizeof ps:除了赋值号(=)外,基类中被重载的操作符都将被派生类继承 5.重载操作符注意事项 (1)不能通过连接其他符号来创建新的操作符,例如operator@ (2)重载操作符时必须有一个类类型或者枚举类型的操作数 (3)用于内置类型的操作符被重载时,其含义不能被改变,例如操作符加号(+)就是用来求和的,重载后,不能改变此操作符的意义 (4)作为类成员的重载函数

C++函数重载的判断依据

匿名 (未验证) 提交于 2019-12-03 00:38:01
1. 函数形参的个数 2. 函数形参的类型 3. 形参的顺序 4. 不能把返回值作为函数重载的条件,原因是编译器在编译时不会去判断函数的返回类型,函数只有调用后,编译器才会去验证返回类型,所以返回值不能作为函数重载的依据。 5. 常函数 const 可以作为函数重载判断依据,原因:重载[]运算符时,有没有const的区别是:有const只读,没有const读写都可以。 文章来源: C++函数重载的判断依据

第六章 习题

匿名 (未验证) 提交于 2019-12-03 00:37:01
(1)运算符的重载实际上是 函数 的重载。 (2)运算符函数必须被重载为 非静态成员函数 或被重载为 友元函数 。 (3)成员函数重载运算符需要的参数的个数总比它的操作数 少 一个。 (4)重载赋值运算符时,通常返回调用该运算符的 对象的引用 ,这样赋值就能进行连续赋值操作。 (5)重载“[ ]”函数必须且只能带 1 个形参,且规定其参数的类型为 整型 。 (6)重载调用运算符函数可以带有 多 个参数。 (1)下列运算符中,不能被重载的是(B)。 A. [ ] B. ● C. ( ) D. / (2)下列描述重载运算符的规则中,不正确的是(C)。 A. 重载运算符必须符合语言语法 B. 不能创建新的运算符 C. 不能改变运算符操作的类型 D. 不能改变运算符原有的优先级 (3)下列运算符中,不能有友元函数重载的是(A)。 A. = B.> C. < D. <> (4)下列描述中,不正确的是(C)。 A. 赋值运算符有时也需要重载 B. 在重载增量或减量运算符时,若应用友元函数,则需要使用引用参数 C. 在任何情况下,重载运算符即可用友元函数,也可用成员函数 D. 若在某自定义类中重载了下标运算符“[ ]”,则可将该类的类对象当作一个“数组” (1)下标运算符的重载提供了在C++中实现安全的数组下标的一种方法。 ( 对 ) (2)对下标运算符“[ ]”,即可重载为类成员函数

习题六

匿名 (未验证) 提交于 2019-12-03 00:34:01
一、填空题 (1)运算符的重载实际上是 函数 的重载。 (2)运算符函数必须被重载为 非静态成员函数 ,或被重载为 友元函数 。 (3)成员函数重载运算符需要的参数的个数总比它的操作数 少 一个。 (4)重载赋值运算符时,通常返回调用该运算符的 对象的引用, 这样赋值就能进行连续赋值操作。 1 个形参,且规定其参数的类型 整 型 。 (6)重载调用运算符函数可以带有 多 个参数。 二、选择题 (1)下列运算符中,不能被重载的是(B)。 (2)下列描述重载运算符的规则中,不正确的是(C)。 (3)下列运算符中,不能有友元函数重载的是(A) (4)下列描述中,不正确的是(C)。 三、判断题 (1)下标运算符的重载提供了在C++中实现安全的数组下标的一种方法。(对) (2)对下标运算符“[ ]”,即可重载为类成员函数,又可重载为友元函数。(错) (3)重载后缀“++”运算符时多给出的一个int参数,在函数体中并不被使用。(对) (4)重载运算符需要的参数个数与操作数一样多。(错) 四、简答题 1、比较两种运算符重载形式。 在许多情况下,用友元函数还是成员函数重载运算符在功能上没有什么区别;有时将二元运算符重载为友元函数比重载为成员函数使用起来方便 。当然,重载为友元函数也有一些限制。第一,为保持与C++中规定的赋值语义相一致,虽然赋值运算符是个二元操作符,但不能重载为友元函数。同样

实验7 运算符重载(P289-P292)

匿名 (未验证) 提交于 2019-12-03 00:32:02
实验目的和要求 实验内容 1.调试下列程序 [cpp] view plain copy print ? "font-family:SimSun;font-size:16px;" > //sy7_1.cpp #include<iostream> using namespace class public double double double const const const const friend void const private double inline const return inline const return inline const return inline const return void const if "i" else "+" <<c.imag<< "i" int return //sy7_1.cpp #include<iostream> using namespace std; class complex { public: complex(){real=imag=0.0;} complex(double r){real=r;imag=0.0;} complex(double r,double i){real=r;imag=i;} complex operator + (const complex &c); complex operator -

第六章 课后习题

匿名 (未验证) 提交于 2019-12-03 00:32:02
一、填空题 (1)运算符的重载实际上是 的重载。 (2)运算符函数必须被重载为 ,或被重载为 。 (3)成员函数重载运算符需要的参数的个数总比它的操作数 一个。 (4)重载赋值运算符时,通常返回调用该运算符的 ,这样赋值就能进行连续赋值操作。 个形参,且规定其参数的类型 整 。 (6)重载调用运算符函数可以带有 个参数。 二、选择题 (1)下列运算符中,不能被重载的是(B)。 (2)下列描述重载运算符的规则中,不正确的是(C)。 (3)下列运算符中,不能有友元函数重载的是(A) (4)下列描述中,不正确的是(C)。 三、判断题 (1)下标运算符的重载提供了在C++中实现安全的数组下标的一种方法。(对) (2)对下标运算符“[ ]”,即可重载为类成员函数,又可重载为友元函数。(错) (3)重载后缀“++”运算符时多给出的一个int参数,在函数体中并不被使用。(对) (4)重载运算符需要的参数个数与操作数一样多。(错) 四、简答题 (1)比较两种运算符重载形式。 答:在许多情况下,用友元函数还是成员函数重载运算符在功能上没有什么区别;有时将二元运算符重载为友元函数比重载为成员函数使用起来方便 。当然,重载为友元函数也有一些限制。第一,为保持与C++中规定的赋值语义相一致,虽然赋值运算符是个二元操作符,但不能重载为友元函数。同样,也应将“+=”、“-=”等赋值运算符重载为成员函数。第二

C++中函数重载的理解

匿名 (未验证) 提交于 2019-12-03 00:30:01
我们在平时写代码中会用到几个函数但是他们的实现功能相同,但是有些细节却不同。例如:交换两个数的值其中包括(int, float,char,double)这些个类型。在C语言中我们是利用不同的函数名来加以区分。 void Swap1(int* a, int* b); void Swap2(float* a, float* b); void Swap3(char* a, char* b); void Swap4(double* a, double* b); 我们可以看出这样的代码不美观而且给程序猿也带来了很多的不便。于是在C++中人们提出了用一个函数名定义多个函数,也就是所谓的函数重载。 一.函数重载定义 是一种特殊情况,C++允许在 同一作用域中声明几个类似的同名函数 , 这些同名函数的形参列表(参数个数,类型,顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。 注意:重载函数的参数个数,参数类型或参数顺序三者中必须有一个不同 #include<Windows.h> #include<iostream> using namespace std; int Add(int a, int b) { return a + b; } double Add(double a, double b) { return a + b; } float Add(float a, float b)