我是C ++的新手,我缺少一些术语(无法向Google提出具体问题),所以我会尽量保持清晰。
假设我已经实例化了A类的对象。然后,从A类对象的方法中,我创建了一个B类对象。
在我的班级B中,我想使用A类的对象作为参数(如果可能的话,通过引用传递)。
这可能吗?
感谢。
答案 0 :(得分:4)
use the object of class A as an argument
很难说出你的意思。你的意思是它创建的那个?除此之外,它听起来像是在描述循环依赖。也许这就是你要找的东西?
//B.h
class A; //DO NOT INCLUDE. This is called "forward declaration"
class B {
A& parent; //All `A` in this file must be reference or pointer
public:
B(A& a);
};
//A.h
#include "B.h"
class A {
B function(); //since it's not reference or pointer, must have include
};
//B.cpp
#include "B.h"
#include "A.h"
void B::function(A& a)
: parent(a)
{}
//A.cpp
#include "B.h"
#include "A.h"
B A::function()
{
return B(*this);
}
请注意,如果B::parent
是引用,则无法将B
分配给另一个,则会丢失所有复制语义。如果你需要那些,你必须改为使用parent
指针。这是推荐的,但你具体要求参考。只要A
存在,引用还要求B
保留在内存中,这可能是一个棘手的保证。
答案 1 :(得分:1)
是的,在class A
的方法中,您可以使用关键字A
来引用this
的当前实例。例如,您可以this
为class A
的构造函数提供class B
。
我的C ++语法有点生疏,所以这里有一个C#示例,可以直接翻译成C ++:
public class A
{
public void MyMethod()
{
B b = new B(this);
}
}
public class B
{
public B(A parent) { // Do something with A, maybe store it in B for later reference
}
}
答案 2 :(得分:1)
您需要将创建对象作为参考传递给构造函数:
B b(*this);
你在哪里:
class B {
public:
B(const A &creator_) : creator(creator_) { }
private:
const A& creator;
}