首页 > 编程语言 >C++逆向分析——运算符重载

C++逆向分析——运算符重载

时间:2023-04-09 11:01:14浏览次数:46  
标签:int Number C++ 运算符 operator bool 重载

运算符重载

现在有一个类,其中有一个函数用于比较2个类的成员大小:

#include <stdio.h>   class Number { private: int x; int y; public: Number(int x, int y) { this->x = x; this->y = y; } int Max(Number& n) { return this->x > n.x && this->y > n.y; } };   void main() { Number a(3,4),b(1,2); int res = a.Max(b); printf("%d \n", res); return; }

images/download/attachments/12714553/image2021-4-16_0-29-19.png

但是在这里,我们只是比较一下大小,确实用int类型,这有点浪费了,在C++中有一个类型叫bool类型,其返回就是真(1)、假(0),所以我们可以使用这个数据类型。

images/download/attachments/12714553/image2021-4-16_0-32-33.png

bool类型仅占用一个字节:

images/download/attachments/12714553/image2021-4-16_0-33-28.png

这样比较大小,多少还是有点麻烦,如果我们想实现跟其他的数一样直接比较大小该怎么办?直接使用a > b明显是不行的,因为编译器根本不知道你在比较什么。

这时候我们就需要使用运算符重栽,使用关键词:operator,例如我们想重载大于符号:

#include <stdio.h>   class Number { private: int x; int y; public: Number(int x, int y) { this->x = x; this->y = y; } bool operator>(Number& n) { return this->x > n.x && this->y > n.y; } };   void main() { Number a(3,4),b(1,2); int res = a > b; printf("%d \n", res); return; }

只需要在自定义类里面按照格式重载运算符即可:

images/download/attachments/12714553/image2021-4-16_0-39-16.png

也就是说运算符重载,其本质意义就是给重新定义运算符,或者说取一个别名;其在底层上和我们之前的代码是没有任何区别的,其价值就是为了便于写代码。

重载其他的运算符:

Number operator++(); Number operator--(); Number operator+(Number& n); Number operator-(Number& n); Number operator*(Number& n); Number operator/(Number& n); bool operator<(Number& n); bool operator==(Number& n); bool operator>(Number& n) { return this->x > n.x && this->y > n.y; }

 

标签:int,Number,C++,运算符,operator,bool,重载
From: https://www.cnblogs.com/bonelee/p/17299995.html

相关文章

  • C++逆向分析——模版
    模版假设有一个冒泡排序的函数:voidSort(int*arr,intnLength){inti,k;for(i=0;i<nLength;i++){for(k=0;k<nLength-1-i;k++){if(arr[k]>arr[k+1]){inttemp=arr[k];arr[k]=arr[k+1];arr[k+1]=temp;}}}}但是这个冒泡......
  • C++逆向分析——构造函数和析构函数
    构造函数与析构函数构造函数structStudent{inta;intb; Student(){printf("Look.");} voidInit(inta,intb){this->a=a;this->b=b;} };如上代码中,我们发现了存在一个函数,这个函数没有返回类型并且与结构体名称一样,那这段函数在什么......
  • Code-C++ Invoke Python
    Code-C++InvokePythonhttps://www.cnblogs.com/yongchao/p/17299892.html使用C或C++扩展Python扩展和嵌入Python解释器Python3.10.11Python/CAPI参考手册Python3.11.3Python/CAPI参考手册https://www.cnblogs.com/lidabo/p/17043302.htmlhttps://bl......
  • C++逆向分析——继承
    继承structPerson{intage;intsex;}; structTeacher{intage;intsex;intlevel;intclassId;};如上代码中可以看见,Teacher类与Person类都存在着相同的2个成员age和sex,那么这就相当于重复编写了,我们可以通过继承的方式避免这样重复的编写(当前类名称:......
  • C++逆向分析——new和delete new[]和delete[]
    在堆中创建对象我们可以在什么地方创建对象?全局变量区,在函数外面在栈中创建对象,也就是函数内在堆中创建对象注意:之前一直提到的堆栈实际上是两个概念->堆、栈,我们之前所讲的就是栈,从本章开始要严格区分。在C语言中,我们可以通过一个函数去申请一块内存,就是malloc(N)......
  • C++逆向分析——类成员的访问控制
    类成员的访问控制课外→好的编程习惯:定义与实现分开写,提升代码可读性。如下代码,Student这个类的所有成员我们都可以调用,但是我们不想让被人调用Print1这个方法该怎么?structStudent{intage;intsex; voidPrint1(){printf("FuncPrint1");} voidPrint......
  • C++逆向分析——引用
    引用类型引用类型就是变量的别名,其在初始化时必须要赋值。//基本类型intx=1;int&ref=x;ref=2;printf("%d\n",ref); //类Personp;Person&ref=p;ref.x=10;printf("%d\n",p.x); //指针类型int******x=(int******)1;int******&ref=x;r......
  • C++逆向分析——继承与封装
    面向对象程序设计之继承与封装之前已经学习过继承和封装了,但是要在实际开发中使用,光学语法和原理是不够的,在设计层面我们需要做一些优化。如下代码是继承的例子:#include<stdio.h> classPerson{public:intAge;intSex; voidWork(){printf("Person:Work()......
  • C++逆向分析——多态和虚表
    虚表上一章了解了多态,那么我们来了解一下多态在C++中是如何实现的。了解本质,那就通过反汇编代码去看就行了,首先我们看下非多态的情况下的反汇编代码:然后再来看下多态情况下的反汇编代码:很明显这里多态的情况下会根据edx间接调用,而非多态则会直接调用。那么我们来看下间接......
  • OS-Linux-Ubuntu22.04x64-Python-C++调用Python缺少Python.h
    OS-Linux-Ubuntu22.04x64-Python-C++调用Python缺少Python.h使用C或C++扩展Python扩展和嵌入Python解释器Python3.10.11Python/CAPI参考手册Python3.11.3Python/CAPI参考手册参考https://www.cnblogs.com/lidabo/p/17043302.htmlhttps://blog.csdn.net/z......