将结构/类引用传递给函数

时间:2016-01-11 14:47:27

标签: c++ reference

我是C ++的新手,需要一些帮助。 我想把一个引用传递给一个functon并将它传递给另一个函数。此引用传递给封装到另一个结构/类中的函数:

  1. 我定义了一个

    Class A {
       int ax;
       int ay;
    };
    
  2. 我定义了一个:

    Class B
    {
       int bx;
       int by;
       A: a;
    };
    
  3. 我定义了一个函数:f1(B& arg)

  4. 现在,让我们说aaA类型的对象: 我想传递aa作为函数f1的引用,但是在class B内。 像这样:

    B bb;
    bb.b1=10
    bb.b2=20
    bb.a=aa ==> here I want reference to a 
    
    call f1(*bb)
    

    但引用来自另一个函数,所以finla的东西是:

    caller::f2(&A arg)
    {
      B bb;
        bb.b1=10
        bb.b2=20
        bb.a=arg==> here I want reference to a 
    
        call f1(*bb)
    
    }
    

    感谢。

2 个答案:

答案 0 :(得分:0)

您必须在声明时初始化您的参考。 初始化后,您无法更改“参考”。 你只能改变你所引用的变量。

所以你有两种方法来解决这个问题: 添加构造函数

class A {
    int ax;
    int ay;
};

class B
{
    B(A& v) : a(v) {}
    int bx;
    int by;
    A& a;
};

OR

更改对指针的引用;

答案 1 :(得分:0)

  

我希望传递aa作为函数f1的引用,但是在类B中

然后,您需要将a作为参考变量(使用&):

A& a;

引用需要显式初始化,因此您需要为B提供构造函数来执行此操作:

class B
{
    public:
    B(A& a) : a(a) {} // constructor, to make `a` refer to the given parameter

    int bx;
    int by;
    A& a;
};

现在你可以这样做:

B bb(aa); // passes `aa` to B's constructor
bb.b1 = 10;
bb.b2 = 20;

并使用f1致电bbf1(bb);f1将通过aa访问bb.a

或者,如果您希望a能够引用“nothing”,则可以将其设为指针,以便它可以是空指针。引用必须始终引用有效变量。但这似乎不是你需要的,所以为了简单起见我把它留了出来。