鱼C论坛

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

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

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

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

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

x


问题:这里定义了新的一个类对象,来接受对象P1和P2的和,Person p3 = p1 + p2;
这个语句Person p3 = p1 + p2;  是怎么实现 调用  Person operator+(Person& p),这个调用过程是怎样的?能详细指教一下吗
成员函数的传入对象是一个,却能实现两个成员函数的相加
//加号运算符重载
#include <stdio.h>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string> 
using namespace std;
class Person
{
public:

        //1.成员函数重载 +
        Person operator+(Person& p)
        {
                Person temp;
                temp.m_a = this->m_a + p.m_a;
                temp.m_b = this->m_b + p.m_b;
                return temp;
        }
        int m_a;
        int m_b;
};

void test()
{
        Person p1;
        p1.m_a = 10;
        p1.m_b = 20;
        Person p2;
        p2.m_a = 20;
        p2.m_b = 30;

        Person p3 = p1 + p2;

        cout << "p3.m_a = " << p3.m_a << endl;
        cout << "p3.m_b = " << p3.m_b << endl;
}
int main()
{
        test();
        return 0;
}
最佳答案
2021-11-13 19:32:29
p1 + p2
//相当于
p1.operator+(p2)
//你可以自己试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2021-11-10 22:00:06 | 显示全部楼层
        movl        $10, -32(%rbp)
        movl        $20, -28(%rbp)
        movl        $20, -24(%rbp)
        movl        $30, -20(%rbp)
        leaq        -24(%rbp), %rdx
        leaq        -32(%rbp), %rax
        movq        %rdx, %rsi
        movq        %rax, %rdi
        call        Person::operator+(Person&)
        movq        %rax, -16(%rbp)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-10 22:02:10 | 显示全部楼层
就是这样实现调用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-10 22:05:05 | 显示全部楼层
传给 Person::operator+(Person&) 这个函数的参数有 2 个
第 0 个是变量 p1 的地址
第 1 个是变量 p2 的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-13 19:32:29 | 显示全部楼层    本楼为最佳答案   
p1 + p2
//相当于
p1.operator+(p2)
//你可以自己试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 23:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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