C++技术交流

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  6 随笔 :: 8 文章 :: 1 评论 :: 0 Trackbacks

重载的基本概念

在非面向对象的过程化语言中,要不每个过程或函数必须具有惟一的调用名,否则会导致编译错误。面向对象程序设计语言提供使用同一函数名的机制,通过参数个数的不同或类型的不同来选择使用相应的代码,这就是的函数的重载。

重载函数可分为

1) 参数个数不同的重载
2) 参数类型不同的重载
3) 参数顺序不同的重载




运算符重载

C++语言允许程序员重新定义已预定义的运算符,使其能按用户的要求具有新的含义,这就是所谓的运算符重载。


运算符重载的格式

运算符重载的形式有两种:重载为类的成员函数和重载为类的友元函数

运算符重载为类的成员函数的语法形式如下:
<函数类型> operator <被重载的运算符><形参表>
{
<函数体>;
}

运算符重载为类的友元函数的语法形式如下:
friend <函数类型> operator <被重载的运算符><形参表>
{
<函数体>;
}

一般来讲,单目运算最好重载为成员函数,而双目运算符则最好重载为友元函数。

重载为成员函数

例:

#include<iostream.h>
class Time
{
private:
 int hours,minutes,seconds;
public:
 Time()
 {
  hours=0;minutes=0;seconds=0;
 }
 Time(int h, int m, int s)
 {
  hours=h; minutes=m; seconds=s;
 }
 Time operator +(Time &);
 void gettime();
};

Time Time::operator +(Time & time)
{
 int h,m,s;
 s=time.seconds+seconds;
 m=time.minutes+minutes;
 h=time.hours+hours;
 Time result(h,m%60,s%60);
 return result;
}

void Time::gettime()
{
 cout<<hours<<":"<<minutes<<":"<<seconds<<endl;
}
void main()
{
 Time t1(8,51,40),t2(4,15,30),t3;
 t3=t1+t2;
 t3.gettime;
}





操作符重载为友元函数形式


#include<iostream.h>
class Time
{
private:
 int hours,minutes,seconds;
public:
 Time(){ hours=0; minutes=0; seconds=0; }
 Time(int h, int m, int s)
 {
  hours=h; minutes=m, seconds=s;
 }
 friend Time operator +(Time &, Time &);
 void gettime();
};
Time operator +(Time &time1, Time &time2)
{
 int h,m,s;
 s=time1.seconds+time2.seconds;
 m=time1.minutes+time2.minutes+s/60;
 h=time1.hours+time2.hours+m/60;
 Time result(h,m%60,s%60);
 return result;
}
void Time::gettime()
{
 cout<<hours<<":"<<minutes<<":"<<seconds<<endl;
}
void main()
{
 Time t1(8,51,40),t2(4,15,30),t3;
 t3=t1+t2;
 t3.gettime();
}


何时应该用成员函数,何时用友元函数来访问类的私有部分。
这地是要注意的地方:
(1)构造函数、析构函数和虚函数运算必须用成员函数;
(2)若运算符的操作需要修改类对象在状态,则它应该是成员函数,而不是友元函数;
(3)需要左值操作数的运算符(如:=、+=、++)的重载最好用成员函数;
(4)如果运算符所需的操作数(尤其是第一个操作数)希望在隐式类型转换,则该运算符重载必须用友元,而不是成员函数;
(5)不能用友元函数重载的运算符有:=;();[];->,其余运算符都可以使用友元来实现重载。

posted on 2006-06-24 10:44 啊嵩 阅读(141) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理