通过对不同对象的引用传递对象

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();
}