如何在彼此中使用两个类的实例
How to use instances of two classes in each others
就像标题状态一样;假设我有两个头文件:
// a.h
class A {
A();
B operator+(A);
}
和
// b.h
class B {
B(A);
}
是否有可能以某种方式使用包含/转发声明来完成这项工作?
我当然见过许多相关的问题,但它们通常要么A
,B
包含彼此的实例(这显然是不可能的),要么可以用指针或引用而不是对象实例来修复。但是,我仍然希望B
的构造函数实际使用A
实例,这可能吗?
是否可以以某种方式使用 include/forward 声明来完成这项工作?
果然如此。
函数的声明仅取决于其参数类型和返回的声明。它们不依赖于定义。
因此,两个类都不依赖于另一个类的定义,而只依赖于声明。因此,只需在定义另一个之前向前声明一个。B A::operator+
确实依赖于B
的定义,B::B
也依赖于A
的定义,所以这些必须以正确的顺序定义。为了满足依赖关系要求,必须在类的定义之外至少定义其中一个。
-
要定义
A
:- 声明
B
- 定义
A
- 声明
-
要定义
B
:- 声明
A
- 定义
B
- 声明
-
定义
B A::operator+
- 按任意顺序定义
A
和B
- 定义
B A::operator+
- 按任意顺序定义
-
定义
B::B
- 按任意顺序定义
A
和B
- 定义
B::B
- 按任意顺序定义
举个例子:
struct B;
struct A {
B operator+(A);
};
struct B {
B(A){}
};
B A::operator+(A) {
return {*this};
}
int main() {
A a;
B b = a+a;
}
相关文章:
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- C++两个源文件之间共享的枚举的静态实例
- 堆栈分配的类类型.为什么两个 ID 实例的地址相同?
- 比较两个 std::chrono::time_point 实例时出错
- 在两个类实例之间共享向量
- 编译时检查是否有两个具有相同模板参数的模板实例化
- 使用模板检查我的类的两个实例是否相等
- 随机洗牌似乎会产生相同的结果,但仅在前两个实例中产生相同的结果.我如何避免这种情况
- 运算符*=来自两个实例(矩阵),结果不好
- 如何超载分配运算符,该操作员总计两个实例变量
- 如何使用两个实例中的值进行计算
- 如何检查我的类的两个实例是否相等
- 访问两个实例
- 类 COpenGLControl 的两个实例之间的动态数据交换
- 如何用不同的静态值启动同一个应用程序的两个实例
- Boost asio和线程,如果我运行两个实例,我得到cpu在100%
- 如何消除具有相同模板参数名称的模板类的两个实例的歧义
- c++对象正在创建同一数组的两个实例,但作用域不同
- c++在child的两个实例之间共享parent属性
- 在两个不同的输入数据集上运行同一个C/ c++程序的两个实例