【Cpp】函数和算符重载

重载

函数重载

函数同名,可以通过不同的参数表来区分,定义不同的行为。

构造/析构函数

构造函数可以重载为多种形式。析构函数不能被重载。

复制构造函数

当类中有指针或引用指向外部空间时,需要考虑对象的深拷贝和浅拷贝的问题。

可以通过重载一个传入同类对象参数的构造函数,来创建复制构造函数(Copy Constructor),实现显式的深拷贝。

Class::Class(const Class& obj)
{
    // Deep copy implementation.
}

同时,需要通过重载赋值元素运算符 = 来完成隐式的深拷贝,避免用户在使用过程中出现不易察觉的错误。

算符重载

算符重载本质上是定义和调用函数的另外一种方式(语法糖)。

C++内置类型的算符无法被修改,只能够重载用户自定义类的算符,以告知程序如何对某个自定类做算符运算。所以算符的重载是以类成员函数/友元函数定义的方式进行的。显然,也只有参数至少有一个自定义类的算符能够被重载。

ReturnType Class::operator@(Argument List)
{
    // Implementation.
}

可以看出本质上是在定义一个名为 operator@ 的成员函数。 a@b 本质上为 a.operator@(b)

注意,重载不能够改变算符原生存在的运算优先顺序

算符

只能够重载C++语言中原生的算符,无法定义新的算符。算符数量不足时,额外功能只能通过函数定义实现。

在类定义时, = & , 等算符已经被预定义。可以重载 = 算符在实现赋值时的深拷贝(否则默认情况下仅仅为浅拷贝)。

重载算符的操作变量数与重载前其原生操作变量数相同,一元操作符仍为一元,二元操作符仍为二元。其中 - 例外,其原生状态下有一元(取负)和二元(减法)两种功能。

  • 不是所有的算符都能够被重载,不能被重载的算符有:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值