访问范围变量而不传递它们?

时间:2015-08-19 16:26:23

标签: c++

有没有办法在班外访问变量?

class MyClass1
{
public:
    int x;
};

class MyClass2
{
public:
    int get_x()
    {
        //somehow access MyClass1's variable x without 
        //passing it as an argument and return it.
    }
}

int main()
{
    MyClass1 obj1;
    obj1.x = 5;
    MyClass2 obj2;
    std::cout << obj2.get_x();
    return 0;
}

让我不愿意将我的程序拆分成许多小型有组织的类而不是一些混乱的大型类的主要原因之一是将一个类可能需要的每个变量传递给另一个变量的麻烦。能够访问变量而不必传递它们(并且必须更新声明和定义应该更改)将非常方便,并且可以让我更加模块化地编码。

我的问题的任何其他解决方案也将受到赞赏,因为我怀疑尝试以这种方式访问​​变量可能会有一些危险。

1 个答案:

答案 0 :(得分:3)

您可以访问x MyClass1的唯一方法是,如果您拥有该类的实例,因为x不是static

class MyClass2
{
public:
    MyClass2(MyClass1* c1) : myC1(c1) {}
    int get_x()
    {
        return myC1->x;
    }
private:
    MyClass1* myC1;
}

然后你可以像

一样使用它
int main()
{
    MyClass1 obj1;
    obj.x = 5;
    MyClass2 obj2{&obj1};
    std::cout << obj2.get_x();
    return 0;
}