我是C ++的新手,现在我遇到了关于我无法理解的指针和引用的问题。
我已经阅读了一些关于指针和引用的内容,但是这个符号正在杀了我......这真的让人感到困惑......我需要一些帮助,一些简单明了的解释,请不要使用高级或优化的模糊技术,只是简单并简单解释这里发生了什么,以了解这些指针和引用是如何工作的。
案例如下:
在 Main 类中有一个 ConnectionHandler 对象,该对象使用空构造函数进行实例化,但尚未处于可用状态。在同一个 Main 类中,还有另外两个对象 InputListenerTask 和 NetworkListenerTask 。
InputListenerTask 和 NetworkListenerTask 都会收到相同的 ConnectionHandler 实例。
在 InputListenerTask 中的某个时刻,用户将输入ip,port,user,pass,并且需要将此信息设置为 ConnectionHandler 。
所有这些都是在 InputListenerTask 类中完成的,当 InputListenerTask 继续运行时,需要将此 ConnectionHandler 实例传递给其他几个类需要使用它来通过网络发送数据, NetworkListenerTask 也将开始运行并使用相同的连接,将其传递给它的助手类。
我想我理解如何通过引用从A类传递到B类,但 当我需要将引用作为B中的字段存储并通过B引用再次传递时,它开始变得混乱到C ..
答案 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
...
}
只要想到&
引用符号就是说“你在这个变量中改变的任何东西都会影响你传入的任何东西”。