鱼C论坛

 找回密码
 立即注册
查看: 2009|回复: 5

[已解决]c++ 成员函数重载

[复制链接]
发表于 2021-11-10 21:36:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


问题:这里定义了新的一个类对象,来接受对象P1和P2的和,Person p3 = p1 + p2;
这个语句Person p3 = p1 + p2;  是怎么实现 调用  Person operator+(Person& p),这个调用过程是怎样的?能详细指教一下吗
成员函数的传入对象是一个,却能实现两个成员函数的相加

  1. //加号运算符重载
  2. #include <stdio.h>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<cstdio>
  6. #include<string>
  7. using namespace std;
  8. class Person
  9. {
  10. public:

  11.         //1.成员函数重载 +
  12.         Person operator+(Person& p)
  13.         {
  14.                 Person temp;
  15.                 temp.m_a = this->m_a + p.m_a;
  16.                 temp.m_b = this->m_b + p.m_b;
  17.                 return temp;
  18.         }
  19.         int m_a;
  20.         int m_b;
  21. };

  22. void test()
  23. {
  24.         Person p1;
  25.         p1.m_a = 10;
  26.         p1.m_b = 20;
  27.         Person p2;
  28.         p2.m_a = 20;
  29.         p2.m_b = 30;

  30.         Person p3 = p1 + p2;

  31.         cout << "p3.m_a = " << p3.m_a << endl;
  32.         cout << "p3.m_b = " << p3.m_b << endl;
  33. }
  34. int main()
  35. {
  36.         test();
  37.         return 0;
  38. }
复制代码
最佳答案
2021-11-13 19:32:29
  1. p1 + p2
  2. //相当于
  3. p1.operator+(p2)
  4. //你可以自己试试
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-10 21:52:39 | 显示全部楼层
这个语句Person p3 = p1 + p2;  是怎么实现 调用  Person operator+(Person& p)
想知道怎么实现的,去看汇编语言
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-10 22:00:06 | 显示全部楼层
  1.         movl        $10, -32(%rbp)
  2.         movl        $20, -28(%rbp)
  3.         movl        $20, -24(%rbp)
  4.         movl        $30, -20(%rbp)
  5.         leaq        -24(%rbp), %rdx
  6.         leaq        -32(%rbp), %rax
  7.         movq        %rdx, %rsi
  8.         movq        %rax, %rdi
  9.         call        Person::operator+(Person&)
  10.         movq        %rax, -16(%rbp)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-10 22:02:10 | 显示全部楼层
就是这样实现调用的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-10 22:05:05 | 显示全部楼层
传给 Person::operator+(Person&) 这个函数的参数有 2 个
第 0 个是变量 p1 的地址
第 1 个是变量 p2 的地址
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-13 19:32:29 | 显示全部楼层    本楼为最佳答案   
  1. p1 + p2
  2. //相当于
  3. p1.operator+(p2)
  4. //你可以自己试试
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表