C++ 在不使用成员函数和友元函数的情况下实现运算符重载

C++ 在不使用成员函数和友元函数的情况下实现运算符重载,c++,operator-overloading,C++,Operator Overloading,非成员和非朋友函数是否可以实现这一点 假设它是一个二进制运算符,这意味着我们需要传递来自不同对象的两个参数。它如何访问私有成员?这是一个示例: class Foo{ private: int m_i; public: Foo(int i): m_i{i} {} int get() { return m_i; } }; Foo operator+(Foo& foo1, Foo& foo2){ return {foo1.get() + foo2.ge

非成员和非朋友函数是否可以实现这一点

假设它是一个二进制运算符,这意味着我们需要传递来自不同对象的两个参数。它如何访问私有成员?

这是一个示例:

class Foo{
private:
    int m_i;
public:
    Foo(int i): m_i{i} {}
    int get() { return m_i; }
};

Foo operator+(Foo& foo1, Foo& foo2){
    return {foo1.get() + foo2.get()}; // you can not access m_i directly as you do in member functions and friend functions
}

一般来说,您可以使用普通函数对运算符重载运算符,这些运算符不修改状态左操作数,也不需要直接访问私有或受保护的成员。

这是可能的,但您不能直接访问私有成员。这取决于许多未知因素。什么接线员?公开的方法有哪些?Etc“您不能直接访问私有成员”-事实上,您可以,但它需要一些复杂的模板来完成。成员的getter函数和打印方法都可以使用。EX在一天结束时,你可以做任何事情在C++中。不管你是否应该,现在这是一个完全不同的问题。