![](/img/trans.png)
[英]Vector of Class-Object pointers: How to get value at pointer address? C++ and SDL_Rect
[英]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.