我正在构建一个MFC应用程序,其中位于选项卡中的按钮 - 因此在单独的类中 - 必须访问某些对象中的功能以控制电机和I / O.
有一个控制器类,其中创建了所有其他对象。控制器对象在主MFC代码中创建。因此,可以使用controller.object.function
通过控制器调用所有函数。
前面提到的按钮位于不同的类中,默认情况下无法访问这些功能,因此我需要授予它们访问权限。我已经编写了这个测试项目,希望得到关于我通过引用传递对象的方式的反馈。
这被认为是通过引用传递对象的正确方法吗?
#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");
}
答案 0 :(得分:0)
您的解决方案很好,但具有引用成员的类不可移动且不可分配。
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();
}