尝试发布一个更容易阅读/调试的示例,该示例是我先前发布的。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,则它将因为拥有自己的副本而无法识别更改。(如果您使用指针/引用,还请注意所引用对象的复制/移动行为和生存期)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句