我有一个类测试引用的默认构造函数。

class test {
public:
    test(int &input1) : int_test(input1) {};
    ~test() {};

    int & int_test; 
}; 

然后再有2个与test交互的类,如下所示:

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= &notebook::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)不反映指针的变化。 有人可以向我解释为什么吗? 或者我在这里做错了。

===============>>#1 票数:0

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 = &notebook::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

===============>>#2 票数:0

您的类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成员传递给test的构造函数。 因此,现在对象t1引用了s1的int_notebook成员。 它并不关心您用来获取该成员的间接的晦涩难懂的级别。 It [t1]对f1或f1.p_notebook一无所知。 因此,当您执行此操作时:

f1.p_notebook=&s2;

这对s1.int_notebook绝对没有影响,因此对t1的引用成员没有影响。

  ask by A Elansary translate from so

未解决问题?本站智能推荐:

3回复

提供正确的类似指针行为(指向常量的指针)的替代类设计?

我正在编写一组C ++参数化的类,并且我对其中一些类似于指针的行为感兴趣。 特别是,我希望能够从具有非恒定模板参数的对象创建具有恒定模板参数的对象,但不能反过来。 此示例代码应阐明我的意图: 通过创建下一个类层次结构(简化了可读性),我已经能够实现此特定行为: 它可以按预期工
11回复

是对象的类成员-是否有指针? C ++

如果我创建一个类MyClass,并且有一些私有成员说MyOtherClass,那么使MyOtherClass成为指针是否更好? 就其在内存中的存储位置而言,使其不是指针又意味着什么? 创建类时会创建对象吗? 我注意到QT中的示例通常将类成员声明为类时的指针。
6回复

C ++类中带有指针的垃圾

我正在使用Borland Builder C ++。 我有内存泄漏,我知道一定是因为我创建了这个类,但是我不确定如何解决它。 请查看我的代码-任何想法将不胜感激! 这是.h文件: 这是一些.cpp文件: 现在,当我在main中使用该类时,基本上我只是创建一个指针:
4回复

成员互相引用的C ++类

我正在尝试用相互引用的成员编写2个类。 我不确定我做错了什么,或者说这是不可能的。 有人可以帮我从这里出去吗... Source.cpp Headers.h Network.h Router.h 我得到的错误是: 错误C2143:语法错误:缺少
2回复

指针和引用

这是问题所在。 我试图创建一个内存图,直到b ++为止,我都了解了所有内容,因为执行该代码时,它将val的值从10更改为4。这是什么原因?
3回复

引用指针

ptr和rptr有什么区别? 我理解rptr是一个指针的引用(理论上),但它与ptr的实现方式有何不同? C ++中的引用是否使用指针实现?
3回复

引用指针

我只是对这两种说法感到困惑。 1。 要打印的价值,可以通过 以上所有将打印a的值,但是,这就是我想知道的。 现在,这就是对指针的引用的定义方式 我只想了解为什么第一个没有定义对指针的引用。
3回复

为什么“ this”是指针而不是引用?

我在阅读有关C ++优缺点的问题的答案,并在阅读注释时遇到了疑问。 程序员经常发现“ this”是一个指针而不是一个引用令人困惑。 另一个困惑是为什么“ hello”不是std :: string类型,而是求值为char const *(指针)(在数组到指针的转换之后)– Johan
5回复

关于指针的引用

我一直在做树,因为种树会拯救地球(或只是程序)。 长话短说我先尝试过使用shared_ptrs,但insert()函数永远不会在我的树中添加任何元素。 我以为我可能会对共享做错了所以我尝试了原始指针,并且我得到了相同的非插入式resoults。 结果我需要传递一个引用我的root
1回复

从指针返回引用

我在singleton.h有这个课程: 我在singleton.cpp有此实现: 尝试return _instance时出现编译器错误。 我想返回一个SingletonSample& ,但是我的_instance是一个指针SingletonSample* 。