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

相关推荐

  1. c++对象

    2024-07-21 11:08:01       14 阅读
  2. 22 对象

    2024-07-21 11:08:01       51 阅读
  3. C++ --> 对象

    2024-07-21 11:08:01       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 11:08:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 11:08:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 11:08:01       45 阅读
  4. Python语言-面向对象

    2024-07-21 11:08:01       55 阅读

热门阅读

  1. 一种Android系统双屏异显的两路音频实现方法

    2024-07-21 11:08:01       12 阅读
  2. windows核心编程:第3章内核对象防止多开

    2024-07-21 11:08:01       17 阅读
  3. 关于限定视频码率的问题

    2024-07-21 11:08:01       14 阅读
  4. 如何进行结构化编程:结合代码的实践指南

    2024-07-21 11:08:01       17 阅读
  5. LeetCode 150, 112, 130

    2024-07-21 11:08:01       17 阅读
  6. 《李彦宏在世界人工智能大会发言的深度洞察》

    2024-07-21 11:08:01       11 阅读
  7. 录入学生信息

    2024-07-21 11:08:01       17 阅读
  8. 分布式ID是什么?有哪些解决方案?

    2024-07-21 11:08:01       16 阅读