如何将变量从class元素传递给class元素? (C ++)

时间:2010-06-26 13:49:35

标签: c++ class

我的问题可能不太正确......我的意思是:

class MyClass
{
public:
    MyClass()
    {
    }

    virtual void Event()
    {
    }
};

class FirstClass : public MyClass
{
    string a; // I'm not even sure where to declare this...

public:
    FirstClass()
    {
    }

    virtual void Event()
    {
        a = "Hello"; // This is the variable that I wish to pass to the other class.
    }
};

class SecondClass : public MyClass
{
public:
    SecondClass()
    {
    }

    virtual void Event()
    {
        if (a == "Hello")
            cout << "This is what I wanted.";
    }
};

我希望这至少有点意义......

修改:_This已更改为a

2 个答案:

答案 0 :(得分:4)

你需要做的是让SecondClass从FirstClass继承并声明_This为受保护。

class FirstClass : public MyClass
{
protected:
    string _This;

public:

class SecondClass : public FirstClass

你得到的东西没有意义,因为班级只能看到父母的成员和功能(在你的情况下是MyClass)。仅仅因为两个类继承自同一个父级并不意味着它们之间存在任何关系或相互了解。

此外,protected表示从该类继承的所有类都能够看到其成员,但没有其他人。

答案 1 :(得分:1)

我想你需要这样的东西(为了简单起见,我省略了所有不必要的代码):

class Base{
public:
    ~Base(){}
protected:
    static int m_shared;
};

int Base::m_shared = -1;

class A : public Base{
public:

    void Event(){
        m_shared = 0;
    }

};

class B : public Base{
public:

    void Event(){
        if (m_shared == 0) {
            m_shared = 1;
        }
    }
};


int _tmain(int argc, _TCHAR* argv[])
{
    A a;
    B b;

    a.Event();
    b.Event();
    return 0;
}

为了解释上面的内容,我将解释静态数据成员:

非静态成员对于每个类实例都是唯一的,您无法在类实例之间共享它们。另一方面, static 成员由该类的所有实例共享。

P.S。我建议您阅读this本书(特别是Observer图案)。另请注意,上面的代码不是线程安全的。