通过单个实例从多个类访问一个类
Access a class from multiple classes through single instance
下面是一段代码:
#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;
}
相关文章:
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我想访问std::unique_ptr中的一个特定元素
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 编写一个函数来删除单链表中的节点(尾部除外),仅授予对该节点的访问权限
- Qt:从另一个窗口访问公共对象
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 使用 map.end() 访问 map 的最后一个元素
- 访问 for_each 函数中的前一个元素
- 访问 std:vector 的类成员 std:vector 在一个类中与另一个 std:vector
- 我遇到了一个糟糕的访问问题
- 如果类"A"具有指向另一个类的指针,则"B" A 可以访问 B 类公共方法
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- 无法从 Visual Studio C++ 中的另一个类访问一个类
- 如何使用指针从另一个类访问属性
- C++:在进行切片时对迭代器的约定,特别是对于访问最后一个元素并最终将其删除
- 创建一个类来访问和指定向量类型,并构建一个获取位置并为其分配区域的类
- 使用 C++ 的代码块 我正在尝试从我的类中打印出一个访问器函数。 错误指出请求成员get_address
- Direct X使用C++,当我在FX文件中找到一种技术时,我收到了一个访问违规
- glMapBufferRange给了我一个访问冲突