下面是一段代码:
#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()看到
答案 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;
}