重载operator =在类之间交换数据

时间:2011-09-28 11:34:35

标签: c++ operator-overloading

我想将两个类AB用于某些不同类型的任务。但是我想交换一些数据,两者都应该相似,所以我想在前面使用A = B

那么,如何使用它,避免在头文件中包含双向?

实施例: 在class_a.h中:

#include class_b.h
class A {
  private:
    int i;
  public:
    A& operator=(B& const b);
}

class_b.h:

#include class_a.h // won't work here ...
class B {
  private:
    unsigned long n;
  public:
    B& operator=(A& const a);
}

3 个答案:

答案 0 :(得分:4)

你必须转发声明另一个类:

class B;
class A {
  private:
    int i;
  public:
    A& operator=(B& const b);
}

另请注意,如果您没有getter且需要访问friend class B;,则应该在A的定义中声明B::n

答案 1 :(得分:2)

您需要使用前向声明:

class A;

class B {
  private:
    unsigned long n;
  public:
    B& operator=(A& const a);
}

答案 2 :(得分:0)

不一定更好,但也要考虑不要覆盖作业,而是提供转换。

你可以这样做

#include "b.h"
class A
{
public:
    A(const B&);
    operator B() const;
};

如果您执行a=b;,它将隐式a=A(b),如果您b=a;将隐式b=a.operator B();

这就像说B可以“升级”为A而A“降级”为B. 但你可以在A周围做所有事情,而不是修改B.