运算符重载 成员函数及友元函数

c++多态分为静态多态和动态多态。资料上显示静态多态通过模块和函数重载来实现的,动态多态是通过继承、虚函数、指针来实现的。


1.首先我们看一看函数重载,它旨在用同名函数来完成相同的基本操作,即使这种操作被用于不同的数据类型。运算符重载是将重载的概念扩展到运算符上。当运算符重载为类的成员函数时,函数的参数个数比原来的少一,因为第一个参数默认为this指针隐式传递。
Time operator+(Time &t);
等价于*this+t;
2.在提出友元函数前,我们会发现有时候第一个参数是非类对象时,重载为成员函数的重载并不适用了。重载友元函数没有隐退的参数this,,操作数都由参数来传递了,这样函数的参数就等同于运算符参数格数了。但是注意有一些并不能重载为友元函数:=,(),->.

第一步:将其原型放在类声明中,并且不要忘记关键字friend.
friend Time operator*(double m,const Time &t);
注意:它不是成员函数,但它与成员函数有相同的访问权限。比如可以访问类对象的私有部分。
第二步:函数定义的编写,因为它不是成员函数,所以不要用class::限定符。也不要在定义中使用关键字friend。
举例常见的友元:重载<<运算符
使用输出操作时,我们知道第一个操作是cout,ostream的一个对象。接下来才是类成员。那么我们必须使用友元函数。


void operator<<(ostream &os,const Time &t)
{
os<<t.hours<<t.minutes<<endl;
}

则在main()函数中使用 cout<<t;

但是问题又出现了,如果我要在主函数中输出:cout<<t1<<t2;
那么会出错,因为t2对应的<<左操作符不是ostream的对象了。所以怎么将<<t2左边也是ostream的一个对象呢。因此,将operator<<()函数实现为返回一个指向ostream对象的引用。这样(cout<<t1)运行后就表示ostream对象cout。
其中cout<<t1调用友元函数就是opreator(cout的引用,t1),返回cout的引用(即别名).

所以就形成了我们经常使用的友元函数申明:
friend ostream & operator<<(ostream &os,const Time &t);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值