我想将两个类A
和B
用于某些不同类型的任务。但是我想交换一些数据,两者都应该相似,所以我想在前面使用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);
}
答案 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.