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

时间:2017-05-26 06:57:50

标签: c++ class

下面是一段代码:

#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并分别访问了push和display。因此,a1.display()无法看到a.push推送的数据。我可以拥有一个公共或共享对象并访问这两种方法,以便push()推送的数据可以通过display()看到

3 个答案:

答案 0 :(得分:1)

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

实现此类 sharin g的最简单方法可能是std::shared_ptr

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

这是你的代码修改为使用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;
}