为什么引用在通过指针完成时会中断
Why does referencing break when done through pointers
我有一个引用的默认构造函数用于类测试。
class test {
public:
test(int &input1) : int_test(input1) {};
~test() {};
int & int_test;
};
然后还有 2 个与测试交互的类,如下所示:
class notebook
{
public:
notebook() {};
~notebook() {};
int int_notebook;
};
class factory
{
public:
factory() {};
~factory(){};
notebook *p_notebook;
};
如果我用整数初始化测试 (t2(,这将按预期工作:
int _tmain(int argc, _TCHAR* argv[]){
int var=90;
test t2(var);
cout<<t2.int_test; // this gives 90
var=30;
cout<<t2.int_test; // this gives 30
一旦我通过第三个类工厂使用指向类笔记本成员的指针初始化测试类:
factory f1;
notebook s1;
notebook s2;
s1.int_notebook=10;
s2.int_notebook=2;
int notebook::*p_notebook= ¬ebook::int_notebook;
f1.p_notebook=&s1;
test t1(((f1.p_notebook->*p_notebook)));
cout<<t1.int_test; // This gives 10
但是,如果我将f1.p_notebook的指针更改为笔记本 S2 的另一个对象;
f1.p_notebook=&s2;
cout<<t1.int_test; // This gives 10
T1 的 A 的引用成员 (t1.int_test( 不反映指针的更改。 有人可以向我解释为什么吗? 或者我在这里做错了什么。
class CTester
{
public:
CTester(int &input1) : int_test(input1)
{
std::cout << int_test << std::endl;
}
int &int_test;
};
class notebook
{
public:
int int_notebook;
};
class factory
{
public:
notebook *p_notebook;
};
int main()
{
factory f1;
notebook s1;
notebook s2;
s1.int_notebook=10;
s2.int_notebook=2;
int notebook::*p_notebook = ¬ebook::int_notebook;
f1.p_notebook=&s1;
CTester t1(f1.p_notebook->*p_notebook);
f1.p_notebook=&s2;
CTester t2(f1.p_notebook->*p_notebook);
return 0;
}
这打印
10
2
您的类test
引用了 int。 它不知道 int 实际属于哪个对象。 或者它最初是如何访问该 int 的。 让我们分解这行代码:
test t1(((f1.p_notebook->*p_notebook)));
首先是这个:
f1.p_notebook
从该行开始,它是指向 s1 的指针。 现在这个:
f1.p_notebook->*p_notebook
那是 s1 的int_notebook
成员。 所以有了这个:
test t1(((f1.p_notebook->*p_notebook)));
您正在将 s1 的int_notebook
成员传递给测试的构造函数。 所以现在对象t1
引用了 s1 的int_notebook
成员。 它不关心您用来获取该成员的模糊间接级别。 它[t1]对f1或f1.p_notebook一无所知。 因此,当您执行此操作时:
f1.p_notebook=&s2;
这对s1.int_notebook绝对没有影响,因此对 t1 的引用成员没有影响。
相关文章:
- 在 Ubuntu 中编译 SuiteSparse,在安装 CHOLMOD 时中断
- 在满足条件时中断多个循环,而无需使用 goto (C++)
- Bluez5:入口配对完成时的事件
- Visual Studio从文件中填充数组时中断
- 无法初始化某些指针,在运行时中断程序
- 如何在输入整数时中断 for 循环
- 在发布模式下使用 VS2017 在C++发布模式下构建的应用不会在未经处理的异常时中断
- 恒定表达式在完成时起作用,而不是单个功能
- 输入特定数字时中断循环
- Stockfish 引擎在从视图控制器而不是应用程序委托 iOS 加载时中断
- boost.log在使用Xcode预编译头时中断
- 遇到值时中断
- c++O3优化在循环时中断工作
- gdb:当特定对象发生更改时中断
- 如果在例程中,Gdb 会在错误时中断
- Visual Studio在调试时随机在启动时中断断点
- QProgressDialog栏在完成时重置为零
- 读取 ppm p6 图像完成时出现问题.C++
- 当类对象完成时,是否为 C++ 类的数据成员动态分配的内存会释放
- 视觉工作室2008调试;写入值时中断