通过单个实例从多个类访问一个类

Access a class from multiple classes through single instance

本文关键字:一个 访问 实例 单个      更新时间:2023-10-16

下面是一段代码:

#include <iostream>
#include <vector>
using namespace std;
class A{
    public:
        vector<int> test;
        void push(){ test.push_back(3);}
        void display(){ cout<<test.size();}
};
class B{
    public:
        A a;
        void bar(){a.push();}
};
class C {
    public:
        A a1;
        //void set_values (int,int);
        void foo() {a1.display();}
};

int main () {
    C c;
    c.foo();
    B b;
    b.bar();
    return 0;
}

我正在尝试从多个类 B 和 C 访问 A 中的 push(( 和 display((。我创建了两个对象 a、a1 并分别访问推送和显示。因此,a.push 推送的数据无法被 a1.display(( 看到。我可以有一个公共或共享对象并访问这两种方法吗,以便 display(( 可以看到 push(( 推送的数据

您可以使用间接寻址。一个或两个类可以引用类外的对象,而不是在每个类中具有单独的对象。

也许实现这种沙林g的最简单方法是std::shared_ptr

通常,如果您必须使用多个类中的一个类,并且您的项目只需要该特定类的一个实例(即 Display 对象(,正确的解决方案是使该类成为单例。

以下是修改为使用 A 作为单例的代码(C++ 2011 静态使此单例线程的初始化安全(:

#include <iostream>
#include <vector>
using namespace std;
class A{
        A() {}
        vector<int> test;
    public:
        static A &get() { static A a; return a; }
        void push(){ test.push_back(3);}
        void display(){ cout<<test.size();}
};
class B{
    public:
        void bar(){A::get().push();}
};
class C {
    public:
        //void set_values (int,int);
        void foo() {A::get().display();}
};

int main () {
    C c;
    c.foo();
    B b;
    b.bar();
    return 0;
}

只需创建一个包含数据的类,并给出对第二个类的引用。因此,这两个类都可以直接或间接访问数据。

#include <iostream>
#include <vector>
using namespace std;
class A{
    public:
        vector<int> test;
        void push(){ test.push_back(3);}
        void display(){ cout<<test.size()<<endl;}
};
class B{
    public:
        A a;
        void bar(){a.push();}
        void display() { a.display();}
};
class C {
    public:
        B& a1;
        C(B& _b1):a1(_b1){}
        //void set_values (int,int);
        void foo() {a1.display();}
};

int main () {
    B b;
    C c(b);
    b.bar();
    c.foo();
    return 0;
}