簡體   English   中英

如何正確地將 class object 的引用傳遞給 C++ 中的另一個類對象

[英]How do I correctly pass a reference of a class object into another class-object in C++

嘗試發布我之前發布的問題的更易於閱讀/調試的示例。 main.cpp 中的 A 對象,通過引用傳遞給 B 對象,似乎最終成為原始 A 對象的副本; 也就是說,在 B 對象中對 A 對象執行的操作不會影響在 main.cpp 中創建的 A 對象的實例。 給定 main.cpp 中的打印命令,它會打印以下內容:17、17、42、17; 當我希望程序打印 17、17、42、42 時。

[main.cpp]
#include <iostream>
#include "A.h"
#include "B.h"
using namespace std;

int main()
{
    A a = A();
    B b = B();

    a.setNumber(17);
    b.setA(a);

    cout << a.getNumber() << endl; //prints 17
    cout << b.getNum() << endl; //prints 17

    b.changeNumber(42); 
    cout << b.getNum() << endl; //prints 42
    cout << a.getNumber(); //prints 17
}


[A.cpp]

void A::setNumber(int num)
{
    number = num;
}

int A::getNumber()
{
    return number;
}


[B.cpp]

void B::setA(A &aObj)
{
    a = aObj;
}

void B::changeNumber(int num)
{
    a.setNumber(num);
}

int B::getNum() {
    return a.getNumber();
}

[[Fields]]
[A.h] int number;
[B.h] A a;

感謝您的閱讀!

B 中的成員 a 應該是某種引用或指針。

這是一個在 B 中使用指針的示例實現:

#pragma once

#include "A.h"

class B
{

public:
    void setA(A &aObj)
    {
        a = &aObj;
    }

    void changeNumber(int num)
    {
        a->setNumber(num);
    }

    int getNum()
    {
        return a->getNumber();
    }

private:
    A *a;
};

或寫參考:

#pragma once

#include "A.h"

class B
{

public:
    B(A& obj)
    : a(obj)
    {
    }

    void changeNumber(int num)
    {
        a.setNumber(num);
    }

    int getNum()
    {
        return a.getNumber();
    }

private:
    A& a;
};

否則,如果 B 沒有引用 A,它將無法識別更改,因為它擁有自己的副本。 (如果您使用指針/引用,還要注意您引用的 object 的復制/移動行為和生命周期)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM