• 运算符重载


      所谓重载,就是重新赋予新的含义。函数重载是对一个已有的函数赋予新的含义,使之实现新的功能。

      运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。

    重载运算符的函数一般格式如下:

      函数类型 operator 运算符名称 (形参表列)

      {

        对运算符的重载处理

      }

    注意事项:

      C++不允许用户自己定义行的运算符,只能对已有的C++运算符进行重载。

      除了一下五种运算符不允许重载外,其他运算符允许重载:

        - .(成员访问运算符)

        - .*(成员指针访问运算符)

        - ::(域运算符)

        - sizeof(尺寸运算符)

        - ?:(条件运算符)

      重载不能改变运算符运算对象(操作数)个数;

      重载不能改变运算符的优先级;

      重载不能改变运算符的结合性;

      重载运算符的函数不能有默认参数;

      重载运算符必须和用户自定义的类型对象一起使用,其参数至少应该有一个是类对象或者类对象的引用。(也就是说,参数不能全部都是C++的标准类型,这样约定是为了防止用户修改用于标准类型结构的运算符性质)。

      运算符重载函数除了可以作为类的成员函数外,还可以是非成员函数:放在类外(友元函数)

    重载<<操作符:返回类型是ostream流的引用。一般来说,在调用operator<<()重载函数是传递给它的是哪一个流,它返回的就应该是那个流的一个引用。

    运算符重载及友元函数实例:

     1 #include <iostream>
     2 #include <stdlib.h>
     3 
     4 //重载操作符
     5 class Add
     6 {
     7 public:
     8     Add(int n, int d);
     9     Add operator+(Add rhs);
    10     //Add operator-(Add rhs);
    11     //Add operator*(Add rhs);
    12     //Add operator/(Add rhs);
    13 private:
    14     int num;
    15     int denom;
    16     //友元函数是独立与类本身,但可访问类私有成员
    17     friend std::ostream& operator<<(std::ostream& os, Add p);
    18 
    19 };
    20 
    21 Add::Add(int n, int d)
    22 {
    23     num = n;
    24     denom = d;
    25 }
    26 
    27 Add Add::operator+(Add rhs)
    28 {
    29     return Add(num + rhs.num, denom + rhs.denom);
    30 }
    31 
    32 //友元函数声明
    33 std::ostream& operator<<(std::ostream& os, Add p);
    34 
    35 int main()
    36 {
    37 
    38     Add a(1, 2), b(3, 4);
    39 
    40     std::cout << a << " + " << b << " = " << (a + b) << std::endl;
    41     return 0;
    42 }
    43 
    44 //友元函数实现
    45 std::ostream& operator<<(std::ostream& os, Add p)
    46 {
    47     os << "(" << p.num << ", " << p.denom << ")";
    48     return os;
    49 }

     

    努力!从什么时候开始都不晚
  • 相关阅读:
    [FAQ] jsoneditor 如何切换 mode 或者选择 modes
    IDA动态调试快捷键
    [FAQ] PHP Warning: json_encode(): double INF does not conform to the JSON spec
    Git 工具下载慢问题 & 图像化界面工具
    Windows 查看端口是被什么程序占用
    什么是 objdump 命令
    什么是 IDA 工具
    什么是 ELF 文件(文件格式)
    ARM 反汇编速成
    [Mobi] Android Studio NDK 安装
  • 原文地址:https://www.cnblogs.com/zhangleibo/p/5107836.html
Copyright © 2020-2023  润新知