C++基础——类的运算符重载与友元函数

本文介绍了C++中运算符重载的概念,包括如何定义和使用重载的+和*运算符。同时,讨论了友元函数的特性,它能访问类的私有成员但不属于类的成员函数。此外,还阐述了成员与非成员运算符重载的区别。转换函数方面,讲解了如何实现类型转换以及使用explicit关键字避免不必要的隐式转换。这些概念对于理解C++的高级特性至关重要。
摘要由CSDN通过智能技术生成

1、运算符重载

函数格式:
operatorop(argument-list)

operator+() ; 重载+运算符
operator*() ; 重载运算符
重载运算符,对类对象之间运算等 很方便,直接可以用 + -
/ 等调用

eg:

//申明
class Ctime
{
Ctime operator+(const Ctime &t)const;
==
Ctime sum(const Ctime &t)const;
};
//使用
Ctime a[2] = { Ctime(3,30),Ctime(6,50) };
Ctime b=a[1]+a[0];
//== a[1].sum(a[0]) == a[1].opertor+(a[0])

2、友元函数

友元函数不是 ???类的成员函数,但是可以访问类的私有变量

eg:

//类成员重载函数 
Ctime operator*(double m);
//使用时,必须如下
Ctime a,b;
b=a*2.5;//左边为Ctime 对象,如果换位就会出错,b=2.5*a;无效;如图a

//解决这个问题,就需要申明一个非类成员的函数
Ctime operator*(double m,const Ctime &t);
但是他不能访问私有变量,故只能声明成为友元函数
//友元函数
friend Ctime operator*(double m, const Ctime &);//这个可以写在类里面就可以访问 私有变量了

详细代码见附录
在这里插入图片描述
在这里插入图片描述

3、重载运算符;成员、非成员

eg:Ctime operator+(const Ctime &t)const;
Ctime operator+(const Ctime &t,const Ctime &t);

  • 区别一: 成员函数,可以用this指针隐式传递,非成员函数会多一个参数,只能显示传递
    *区别二:非成员函数不能加限定符,(参数当让可以),返回值等都不行。

4、转换函数

表示方法: operator + typeName();
转换函数是类的方法;不需要参数,需要通过类对象来调用,从而告知函数要转换的值

放在类里面,拥有this指针,能够访问私有成员

为了保险起见;一般都会添加 explicit 防止不必要的隐式转换

过多的转换函数容易导致 二义性,隐式太多,导致编译器不知道执行哪个函数

更多详情见附件

链接:https://pan.baidu.com/s/1SqG81feKfW_PkUDG9Hnk6w
提取码:lcpk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值