C ++通过引用接收的引用参数传递

时间:2014-01-13 17:34:03

标签: c++ pointers reference

我是C ++的新手,现在我遇到了关于我无法理解的指针和引用的问题。

我已经阅读了一些关于指针和引用的内容,但是这个符号正在杀了我......这真的让人感到困惑......我需要一些帮助,一些简单明了的解释,请不要使用高级或优化的模糊技术,只是简单并简单解释这里发生了什么,以了解这些指针和引用是如何工作的。

案例如下:

Main 类中有一个 ConnectionHandler 对象,该对象使用空构造函数进行实例化,但尚未处于可用状态。在同一个 Main 类中,还有另外两个对象 InputListenerTask NetworkListenerTask

InputListenerTask NetworkListenerTask 都会收到相同的 ConnectionHandler 实例。

InputListenerTask 中的某个时刻,用户将输入ip,port,user,pass,并且需要将此信息设置为 ConnectionHandler

所有这些都是在 InputListenerTask 类中完成的,当 InputListenerTask 继续运行时,需要将此 ConnectionHandler 实例传递给其他几个类需要使用它来通过网络发送数据, NetworkListenerTask 也将开始运行并使用相同的连接,将其传递给它的助手类。

我想我理解如何通过引用从A类传递到B类,但 当我需要将引用作为B中的字段存储并通过B引用再次传递时,它开始变得混乱到C ..

2 个答案:

答案 0 :(得分:1)

您可以直接传递参考:

void f1(int& a) {
   cout << a;
}

void f2(int& b) {
   f1(b);
}

int c;
f2(c);

由于引用是实际对象的别名,因此无论是传递对象还是对函数的引用都无关紧要。

答案 1 :(得分:1)

所以在你的Main中它看起来像这样:

ConnectionHandler ch;
InputListenerTask ilt;
NetworkListenerTask nlt;

ilt.foo(ch);

InputListenerTask你有:

InputListenerTask::foo(ConnectionHander& handler){
    ...
    SomeOtherClass s;
    s.doSomethingWithCh(handler);
    ...
} 

并在您的SomeOtherClass中:

SomeOtherClass::doSomethingWithCh(ConnectionHandler& ch){
    ...
    ch.x = 42;  // Assuming ConnectionHandler has a publicly accessible field x
    ...
}

只要想到&引用符号就是说“你在这个变量中改变的任何东西都会影响你传入的任何东西”。