在类内部或外部重载运算符有什么区别? 在C++中,我知道有两种方法可以超载。我们可以在内部(如classa)或外部(如classb)重载它。但是,问题是,这两者在编译时或运行时有什么区别吗 class a { public: int x; a operator+(a p) // operator is overloaded inside class { a temp; temp.x = x; temp.x = p.x; return temp; } }; class b { public: friend b operator+(b, b); int x; }; b operator+(b p1, b p2) // operator is overloaded outside class { p1.x += p2.x; return p1; }
成员在类内部或外部重载运算符有什么区别? 在C++中,我知道有两种方法可以超载。我们可以在内部(如classa)或外部(如classb)重载它。但是,问题是,这两者在编译时或运行时有什么区别吗 class a { public: int x; a operator+(a p) // operator is overloaded inside class { a temp; temp.x = x; temp.x = p.x; return temp; } }; class b { public: friend b operator+(b, b); int x; }; b operator+(b p1, b p2) // operator is overloaded outside class { p1.x += p2.x; return p1; },c++,operator-overloading,C++,Operator Overloading,成员操作员+要求LHS为a——自由操作员要求LHS或RHS为b,另一侧可转换为b struct Foo { Foo() {} Foo(int) {} Foo operator+(Foo const & R) { return Foo(); } }; struct Bar { Bar() {} Bar(int) {} }; Bar operator+(Bar const & L, Bar const & R) { ret
操作员+
要求LHS为a
——自由操作员要求LHS或RHS为b
,另一侧可转换为b
struct Foo {
Foo() {}
Foo(int) {}
Foo operator+(Foo const & R) { return Foo(); }
};
struct Bar {
Bar() {}
Bar(int) {}
};
Bar operator+(Bar const & L, Bar const & R) {
return Bar();
}
int main() {
Foo f;
f+1; // Will work - the int converts to Foo
1+f; // Won't work - no matching operator
Bar b;
b+1; // Will work - the int converts to Bar
1+b; // Will work, the int converts to a Bar for use in operator+
}
问题范围之外的可能重复:但两个加法运算符都未正确实现。运算符应重载以按预期的方式运行。通常(除了+=etc)运算符不会修改这些参数(因此pass by const reference和member运算符应该是const)。这似乎表明在类之外重载运算符总是更好的。但这是真的吗?