c++第三课:类和对象

前言

这节主要讲解了赋值运算符重载和取地址运算符重载

赋值运算符重载

  • 当运算符被用于类类型的对象时,c++允许我们通过运算符重载的形式赋予新的定义。类类型对象使用运算符时,必须转换成调用对应运算符重载
  • 运算符重载是具有特殊名字的的函数,它的名字由operator和后面需要重载的运算符组成。
  • 重载运算符函数的参数个数与该运算符的运算对象个数一样多。
  • 如果一个重载运算符函数是成员函数,那么函数的第一个运算对象默认传给隐式的this指针,因此,运算符作为成员函数时,参数比运算对象少一个。
  • 运算符重载后,其优先性与结合性与对应的内置类型保持一致。
  • 不能连接语法没有的符号来创建运算符,比如operator@
  • .* :: sizeof ?: . 这五个运算符不能重载
  • 重载++运算符时,有前置和后置,运算符重载函数名都是operator++,不好区分,所以,c++规定重载后置++时,增加一个形参int,与前置++构成重载。
  • 重载<<和>>时,需要重载为全局函数,因为如果重载为成员函数,this指针默认抢占了第一个形参位置,第一个形参位置是左侧运算对象,调用时就变成了 对象<<cout,不符合习惯和可读性。
int operator+();
int operator-();
int& operator+=();
int& operator-=();
int operator++(int);//后置
int& operator++();//前置

const成员

将const修饰的 “成员函数” 称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针。表明该函数不能对类的任何成员进行修改。

假设一个类类型A

//错误代码
const A a1;
a1.func();

void A::func();

&a1的类型是const A*,func成员函数中隐含的this指针类型是A*,如果const A* 类型传给A* 类型会造成权限放大,但权限只能缩小不能放大,所以这样的写法不正确。

//正确代码
const A a1;
a1.func();

void A::func() const;

用const修饰成员函数,隐含的this指针类型变成const A* const this,这种写法就合理了。

取地址运算符重载

取地址运算符重载分为普通取地址运算符重载和const取地址运算符重载,这两个运算符重载函数系统默认生成的足够我们使用了,一般不需要去显示实现,除非一些很特殊的场景,比如我们不想让别人取到当前类对象的地址,就可以自己实现一份。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值