从C ++中不相关的函数访问变量

时间:2016-05-29 06:44:23

标签: c++ class inheritance wrapper access-specifier

我想将一个类的变量访问到另一个类中,并将其设置为某个值,例如就像在这里的代码中一样,我想在some_flag中将true设置为secondClassFunction()。可能吗?如果是的话,该怎么做?

系统架构导致的约束:

  1. 这两个类不可继承。
  2. 两个班级也没有关系。
  3. secondClassFunction()的功能签名无法更改。
  4. 以下是代码段: -

    #include <iostream>
    using namespace std;
    
    class FirstClass{
        bool some_flag;
        public:
            void setFlag(bool flag);
            bool getFlag();
    };
    
    FirstClass::FirstClass(){
        some_flag(false);
    }
    
    class SecondClass{
        public:
            void secondClassFunction();
    }
    
    SecondClass::secondClassFunction(){
        // do something here.
    
        // I want to access some_flag using SecondClass object.
        // how to do this?
    }
    
    int main() {
        SecondClass secObj;
        secObj.secondClassFunction();
        return 0;
    }
    

    包装类会有帮助吗?如果是,怎么样?

    编辑: -

    约束4.不能使类成为朋友的功能。

    约束5.无法全局化标志变量。

    详细说明: -

    flag是在FirstClass成员的函数中设置的。 我希望在flag成员的函数中重置此SecondClass。 由于系统架构的限制,这两个类不相关,可继承,并且它们的访问说明符无法更改。

    flag就像一个信号量,它被多个任务用来表示活动的状态,例如,处理器是否从移动应用程序收到了某个命令。

1 个答案:

答案 0 :(得分:0)

您似乎并不关心FirstClass的实例。因此,以下方法适合您:

void SecondClass::secondClassFunction()
{
    // Create local instance of the object to change
    FirstClass first;
    first.setFlag(true);
}

但它完全没有意义。您需要知道要修改的对象。我建议三个选项:

  • 制作FirstClass静态,全局或单身的实例并对其进行修改
  • make some_flag及其setter static
  • 在调用FirstClass
  • 之前将SecondClass::secondClassFunction()的实例设置为上下文

第三个选项解释:

class FirstClass; // Forward declaration
 class SecondClass
{
...
    FirstClass* firstClassInstance;
...
    void setFirstClassInstanceToModify(FirstClass* first)
    {
        firstClassInstance = first;
    }
...
};

void SecondClass::secondClassFunction()
{
    firstClassInstance->setFlag(true);
}

并像这样称呼它

FirstClass first;
...
SecondClass second;
...
second.setFirstClassInstanceToModify(&first);
second.secondClassFunction();

但在调用secondClassFunction

之前,请确保拥有正确有效的实例