RHZ'S BLOG | 个人分享

  • 首页
  • 笔记
  • 小日常
  • 音乐
  • 读书
  • 软件分享
YOLO
  1. 首页
  2. 笔记
  3. C/C++
  4. 正文

操作符重载|C++

2022年9月17日 96点热度 0人点赞 1条评论

操作符重载

大多数 C++ 内置操作符都可以重新定义或重载。

因此,操作符也可以与用户定义的类型一起使用(例如,允许您将两个对象添加在一起)。

这个图表显示了可以重载的操作符。

操作符重载|C++插图

不能重载的运算符包括 :: | .* | . | ?:

让我们声明一个示例类来演示运算符重载:

class MyClass {
 public:
  int var;
  MyClass() {}
  MyClass(int a)
  : var(a) { }
};

我们的类有两个构造函数和一个成员变量。

我们将重载+运算符,以便将我们的类的两个对象添加到一起。

操作符重载|C++插图1

一个类中可以有多个构造函数,只能有一个析构函数。

构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。
析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,它不能带任何参数,也没有返回值(包括void类型)。析构函数与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统会自动执行析构函数。所以只能有一个析构函数,不能重载。

重载操作符是由关键字 operator 定义的函数,后面跟随被定义操作符的符号。

重载操作符类似于其他函数,它具有返回类型和参数列表。

在我们的例子中,我们将重载+运算符。它会返回我们类的一个对象,并把我们类的一个对象作为参数。

class MyClass {
 public:
  int var;
  MyClass() {}
  MyClass(int a)
  : var(a) { }

  MyClass operator+(MyClass &obj) {
  }
};

现在,我们需要定义函数的功能。

我们需要我们的+操作符返回一个新的 MyClass 对象,其成员变量等于两个对象的成员变量之和。

class MyClass {
 public:
  int var;
  MyClass() {}
  MyClass(int a)
  : var(a) { }

  MyClass operator+(MyClass &obj) {
   MyClass res;
   res.var= this->var+obj.var;
   return res; 
  }
};

在这里,我们声明了一个新的 res 对象。然后,我们将当前对象(this)和参数对象(obj)的成员变量的和赋值给 res 对象的 var 成员变量。

这使我们能够在 main 中创建对象,并使用重载的+运算符将它们添加在一起。

int main() {
  MyClass obj1(12), obj2(55);
  MyClass res = obj1+obj2;

  cout << res.var;
}

//输出 67

随着运算符的重载,你可以使用任何自定义逻辑。但是,不可能改变运算符的优先级,分组或操作数的数量。

为类“Test”定义一个重载的+运算符

class Test{
public:
    Test(){}
    Test(int mem):mem(mem){}

    Test operator+(Test &obj){
        Test newobj;
        newobj.mem = this->mem+obj.mem;
        return newobj;
    }
    int getmem(){
        return mem;
    }
private:
    int mem;
friend int getmem(Test &obj){
    return obj.mem;
}
};
操作符重载|C++插图2
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2022年9月17日

RHZ

即使单枪匹马,我亦勇敢无畏

点赞
< 上一篇
下一篇 >

文章评论

  • 头像
    כנסו לאתר

    Everything is very open with a really clear clarification of the challenges. It was really informative. Your website is extremely helpful. Thank you for sharing!

    2022年9月20日
    回复
  • 取消回复
    归档
    • 2023年2月
    • 2022年12月
    • 2022年11月
    • 2022年10月
    • 2022年9月
    • 2022年8月
    • 2022年7月
    • 2022年6月
    • 2022年5月
    • 2022年4月
    • 2022年3月
    • 2022年2月
    • 2021年12月
    • 2021年11月
    • 2021年10月
    • 2021年8月
    • 2021年7月

    COPYRIGHT © 2022 RHZ的博客. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    渝ICP备2022008933号-1