通过引用传递对象到另一个对象

时间:2017-01-16 13:45:07

标签: c++ reference mfc pass-by-reference

我正在构建一个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");
}

1 个答案:

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