获取对象的对象是从中实例化的

时间:2011-11-02 22:02:35

标签: c++

我是C ++的新手,我缺少一些术语(无法向Google提出具体问题),所以我会尽量保持清晰。

假设我已经实例化了A类的对象。然后,从A类对象的方法中,我创建了一个B类对象。

在我的班级B中,我想使用A类的对象作为参数(如果可能的话,通过引用传递)。

这可能吗?

感谢。

3 个答案:

答案 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的当前实例。例如,您可以thisclass 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;
}