c++ - 访问超出范围的变量而不传递它们?

标签 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;
}

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

对于我的问题的任何其他解决方案也将不胜感激,因为我怀疑尝试以这种方式访问​​变量可能存在危险。

最佳答案

您可以访问 MyClass1x 的唯一方法是您拥有该类的实例,因为 x 不是静态

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

关于c++ - 访问超出范围的变量而不传递它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32100937/

相关文章:

c++ - 使用 OpenCV 将 YUV 转换为有损压缩

c++ - I2C通信树莓派3和Arduino

c++ - 对基类成员数据的派生模板类访问

c++ - Opencv 行方法有一个奇怪的行为

c++ - 在 Linux 上用 C++ 编译我的 Boost/NTL 程序

c++ - googletest:如果测试失败则执行附加操作

c++ - Windows & C++ : extern & __declspec(dllimport)

c++ - 如何让简单的一个函数读取我之前的答案并给出不同的输出? (c++)

c++ - 如果字符串包含集合中的任何字符,如何删除它 [c++]

c++ - 用于显示文本模式菜单的库?