gpt4 book ai didi

c++ - 类外的运算符重载

转载 作者:IT老高 更新时间:2023-10-28 14:00:46 24 4
gpt4 key购买 nike

有两种方法可以为 C++ 类重载运算符:

课内

class Vector2
{
public:
float x, y ;

Vector2 operator+( const Vector2 & other )
{
Vector2 ans ;
ans.x = x + other.x ;
ans.y = y + other.y ;
return ans ;
}
} ;

课外

class Vector2
{
public:
float x, y ;
} ;

Vector2 operator+( const Vector2& v1, const Vector2& v2 )
{
Vector2 ans ;
ans.x = v1.x + v2.x ;
ans.y = v1.y + v2.y ;
return ans ;
}

(显然在 C# 中只能使用“外部类”方法。)

在 C++ 中,哪种方式更正确?哪个更可取?

最佳答案

基本问题是“您希望在运算符的左侧参数上执行转换吗?”。如果是,请使用免费功能。如果不是,请使用类成员。

例如,对于字符串的 operator+(),我们希望执行转换,因此我们可以这样说:

string a = "bar";
string b = "foo" + a;

执行转换以将 char * "foo" 转换为 std::string。因此,我们将字符串的 operator+() 变成了一个自由函数。

关于c++ - 类外的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2425906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com