gpt4 book ai didi

具有不同类型的 C++ 对称二元运算符

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:00 25 4
gpt4 key购买 nike

我正在学习 C++,我想知道我是否可以深入了解创建适用于两种不同类型实例的二元运算符的首选方法。这是我用来说明我的担忧的示例:

class A;
class B;

class A
{
private:
int x;

public:
A(int x);

int getX() const;

int operator + (const B& b);
};


class B
{
private:
int x;

public:
B(int x);

int getX() const;

int operator + (const A& A);
};


A::A(int x) : x(x) {}

int A::getX() const { return x; }

// Method 1
int A::operator + (const B& b) { return getX() + b.getX(); }


B::B(int x) : x(x) {}

int B::getX() const { return x; }

// Method 1
int B::operator + (const A& a) { return getX() + a.getX(); }


// Method 2
int operator + (const A& a, const B& b) { return a.getX() + b.getX(); }

int operator + (const B& b, const A& a) { return a.getX() + b.getX(); }


#include <iostream>

using namespace std;

int main()
{
A a(2);
B b(2);

cout << a + b << endl;

return 0;
};

如果我希望两种类型之间具有对称性,哪种方法是上述代码中的最佳方法。选择一种方法而不是另一种方法是否有任何可能的危险?这会因返回类型而异吗?请解释!谢谢!

最佳答案

最好的方法是定义(在任一类之外)int operator+ (const A& a, const B& b),并在需要时将其设为两个类的友元函数。另外,定义

int operator+(const B& b, const A& a) {return a + b;}

使其对称。

关于具有不同类型的 C++ 对称二元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702647/

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