You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++自定义类成员运算符重载的运行机制与规则咨询

C++ 成员函数形式运算符重载执行逻辑解答

你贴的代码如下:

#include <iostream>
using namespace std;
struct Vector2
{
    int x = -500, y = -1000;
    Vector2(int x, int y) : x{x}, y{y} {}
    Vector2 operator+(const Vector2& vec)
    {
        return Vector2(x + vec.x, y + vec.y);
    }    
};

int main()
{
    Vector2 vec1(10, 20);
    Vector2 vec2(15, 30);
    //vec3 should be 25,50;
    Vector2 result = vec1 + vec2;
    cout << result.x << ", ";
    cout << result.y;
}

你的理解完全符合C++运算符重载的规则,具体执行逻辑如下:

  • 用类成员函数重载+这类二元运算符时,编译器遇到vec1 + vec2的表达式,会自动转换为vec1.operator+(vec2)的成员函数调用
  • 调用时重载函数内的this指针指向运算符左侧的vec1对象,你在函数内直接访问的x、y本质是this->x、this->y,对应就是左侧对象的成员
  • 运算符右侧的vec2会作为实参,传入重载函数的形参const Vector2& vec,所以vec.x、vec.y就是右侧对象的成员

你这段代码的运行结果会输出25, 50,和预期完全一致,符合上述运行规则。

补充一个额外的小知识点:如果你需要实现整型常量 + Vector2对象这类左侧操作数不是Vector2类对象的加法,就不能用成员函数形式重载+,需要改用全局函数形式重载才行。

内容的提问来源于stack exchange,提问作者yaelreshet11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:06:04