C++重载函数和运算符

C++重载函数和运算符

重载概述

有了C++语言,你就可以重载函数和运算符。重载是一种应用,它在同一范围中为一个给定函数名称提供了多种定义。委托编译器依据调用该函数的参量选择合适的函数或运算符的版本。例如:

double max(double d1,double d2)

{

return (d1>d2)?d1:d2;

}

int max (int i1, int i2)

{

return (i1>i2)?i1:i2;

}

作为一个重载函数,函数max在程序中使用如下:

main()
{
int i=max(12,8);
double d=max(32.9,17.4);
return i+(int)d;
}
在第一个例子中,要求出两个整型变量的最大值,故调用函数(int,int)。然而,在第二种情况下,两个参量是浮点型,因此调用的函数是max(double,double)。

参量类型的差异

重载函数之间的区别在于带有不同初始值的参量类型。因而对一个给定类型的参量以及对于该类型的引用,在重载的意义上来说是完全相同的。它们被看成是相同的,因为它们采用了相同的初始值。例如:max(double,double)和(double&,double &)是完全相同的,说明两个这样的函数会引起错误。

出于相同的原因,用修饰符const和volatile进行修饰的函数参量类型同基本类型,在重载的意义上看没有什么不同。

然而重载函数的机制可以区分由const或volatile修饰的引用以及基本类型的引用。这使得可以有下列代码:

#include <iostream.h>
class Over
{
public:
Over() {cout << "Over default constructor/n"}
Over(over &o){cout << "Over &/n";}
Over(const Over &co) {cout << "const Over &/n";}
Over(volatile Over &vo) {cout << "volatile Over &/n";}
};
void main()
{
Over o1; //调用缺省构造函数
Over o2(o1); //调用Over(Over&)
const Over o3;//调用缺省构造函数
Over o4(o3); //调用Over(const Over &)
volatile Over o5; //调用缺省构造函数
Over o6(o5); //调用Over(volatile Over &)
}
指向const和volatile对象的指针和指向其基本类型的指针在重载意义上是不同的。

重载函数的限制

一组重载函数是否是可接受的如下限制:

* 该组重载函数中任何两个都必须有不同的参量表。

* 具有相同类型参量表、仅在返回值类型上不同的重载函数会引起错误。

Microsoft特殊处

用户可以仅仅基于返回类型不同而重载new运算符。尤其在基于说明的存储器模式修饰符不同时。

Microsoft特殊处结束

* 成员函数的重载不能仅基于一个说明为静态的,另一个说明为非静态的。

* typedef说明并未定义新的类型,它们仅为已存在的类型引入了一个同义词。它们不能影响重载机制。考虑下面的代码:

typedef char * PSTR;

void Print(char * szToPrint);

void Print(PSTR szToPrint);

前面的两个函数有相同的参量表,PSTR是类型char *的同义词。在成员范围中, 这样的代码会产生错误。

* 枚举类型是一些可区分的类型,故可以区分重载函数。

* 从区分重载函数的意义上说,类型“数组”和“指针”是相同的。对于一维数组来说是正确的。因而下面的重载函数出现了冲突,并会产生一条错误消息:

void Print (char * szToPrint);

void Print (char szToPrint[]);

对于多维数组,第二和后续维数视为类型的一部分,因此它们可以用来区分重载函数:

void Print (char szToPrint []);

void Print (char szToPrint [][7]);

void Print (char szToPrint [][9][42]);


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值