通过对不同对象的引用传递对象
Pass object by reference to a different object
我正在构建一个 MFC 应用程序,其中位于选项卡中的按钮 - 因此位于单独的 class - 必须访问某些对象中的功能以控制电机和 I/O。
有一个控制器class,所有其他对象都是在其中创建的。控制器对象是在主 MFC 代码中创建的。因此,可以使用 controller.object.function
.
通过控制器调用所有功能
前面提到的按钮位于不同的 class 中,默认情况下无法访问这些功能,因此我需要授予它们访问权限。我已经编写了这个测试项目,并希望获得有关我通过引用传递对象的方式的反馈。
这被认为是通过引用传递对象的正确方法吗?
#include <iostream>
class ClassA;
class ClassB;
class ClassB {
public:
ClassB();
void addOne();
int b;
};
ClassB::ClassB() :
b(0) {
}
void ClassB::addOne() {
b = b + 1;
}
class ClassA {
public:
ClassA(ClassB & B_ref);
void addOneToB();
private:
ClassB & B;
};
ClassA::ClassA(ClassB & B_ref) :
B(B_ref) {
}
void ClassA::addOneToB() {
B.addOne();
}
int main() {
ClassB B;
B.addOne();
std::cout << B.b << "\n";
ClassA A(B);
A.addOneToB();
std::cout << B.b << "\n";
system("pause");
}
您的解决方案很好,只是带有参考成员的 class 不可移动且不可分配。
int main() {
ClassB foo;
ClassB bar;
ClassA foo_wrapper(foo);
ClassA bar_wrapper(bar);
// Can't assign, won't compile!
foo_wrapper = bar_wrapper;
system("pause");
}
如果您的设计受益于 ClassA
可移动或可分配,您可以改用 ClassB * B;
。
class ClassA {
public:
ClassA(ClassB & B_ref);
void addOneToB();
private:
ClassB * B;
};
ClassA::ClassA(ClassB & B_ref) :
B(&B_ref) {
}
void ClassA::addOneToB() {
B->addOne();
}
我正在构建一个 MFC 应用程序,其中位于选项卡中的按钮 - 因此位于单独的 class - 必须访问某些对象中的功能以控制电机和 I/O。
有一个控制器class,所有其他对象都是在其中创建的。控制器对象是在主 MFC 代码中创建的。因此,可以使用 controller.object.function
.
前面提到的按钮位于不同的 class 中,默认情况下无法访问这些功能,因此我需要授予它们访问权限。我已经编写了这个测试项目,并希望获得有关我通过引用传递对象的方式的反馈。
这被认为是通过引用传递对象的正确方法吗?
#include <iostream>
class ClassA;
class ClassB;
class ClassB {
public:
ClassB();
void addOne();
int b;
};
ClassB::ClassB() :
b(0) {
}
void ClassB::addOne() {
b = b + 1;
}
class ClassA {
public:
ClassA(ClassB & B_ref);
void addOneToB();
private:
ClassB & B;
};
ClassA::ClassA(ClassB & B_ref) :
B(B_ref) {
}
void ClassA::addOneToB() {
B.addOne();
}
int main() {
ClassB B;
B.addOne();
std::cout << B.b << "\n";
ClassA A(B);
A.addOneToB();
std::cout << B.b << "\n";
system("pause");
}
您的解决方案很好,只是带有参考成员的 class 不可移动且不可分配。
int main() {
ClassB foo;
ClassB bar;
ClassA foo_wrapper(foo);
ClassA bar_wrapper(bar);
// Can't assign, won't compile!
foo_wrapper = bar_wrapper;
system("pause");
}
如果您的设计受益于 ClassA
可移动或可分配,您可以改用 ClassB * B;
。
class ClassA {
public:
ClassA(ClassB & B_ref);
void addOneToB();
private:
ClassB * B;
};
ClassA::ClassA(ClassB & B_ref) :
B(&B_ref) {
}
void ClassA::addOneToB() {
B->addOne();
}